【发布时间】:2017-05-10 02:28:41
【问题描述】:
我正在使用 asp.net 和一个嵌套母版页,我注意到一些非常奇怪的东西。在我的默认页面后面的代码中,我试图通过引用菜单的 ID 来访问我的菜单。但是,每次我这样做时,它似乎都是空的,向我抛出一个空异常错误,即使我在 html 文件中使用不同的菜单项填充了它。在使用母版页之前,我可以通过这种方式访问菜单项。
现在我可以通过添加以下行来规避这个问题 page.Master.FindControl("Menu0"); 在我的每个循环之前。在这一行之后,我的菜单似乎不为空。
protected void Page_PreInit()//run when the page is loaded
{
Debug.WriteLine("website started");// website started
Page.Master.FindControl("Menu0");
foreach (MenuItem item in Menu0.Items)
{
string temp = item.Text;
item.Text = "<span class=\"menuItems\">" + temp + "</span>";//assign correct style
}
}
我不知道为什么 progam 显示我的菜单为空,或者为什么这个特定的行可以解决问题 请多多帮助,谢谢
【问题讨论】:
-
是母版页中的菜单吗?
-
你不需要FindControl,像MasterPage master = this.Master;那样触摸MasterPage就够了,原因众所周知。在 Page_PreInit 事件中,控件为空(尚未创建),但达到 Master 属性会强制创建当前模板中的所有控件。详情看这里weblogs.asp.net/ysolodkyy/master-page-and-preinit
-
好的,这似乎也有效,但为什么呢?为什么在我声明此引用之前我的菜单为空?
-
好的,我会调查的
标签: c# html asp.net master-pages