C# 动态控制寄存器请求控制状态
我使用我的web.config文件定义一个菜单,它工作正常。但为了改进系统,我想将创建的菜单控件存储在对象菜单中,以便在下次调用时重用它 如果我像在生成的版本中那样将菜单控件添加到母版页,则会出现RegisterRequestControlState错误: 无法在预呈现之前或之后调用RegisterRequiresControlStateC# 动态控制寄存器请求控制状态,c#,asp.net,controls,C#,Asp.net,Controls,我使用我的web.config文件定义一个菜单,它工作正常。但为了改进系统,我想将创建的菜单控件存储在对象菜单中,以便在下次调用时重用它 如果我像在生成的版本中那样将菜单控件添加到母版页,则会出现RegisterRequestControlState错误: 无法在预呈现之前或之后调用RegisterRequiresControlState public class tabloidMenu : ConfigurationElementCollection { private Men
public class tabloidMenu : ConfigurationElementCollection
{
private Menu menu_;
static public explicit operator Menu(tabloidMenu configMenu)
{
if (configMenu.menu_ != null) return configMenu.menu_;
Menu menu = new Menu();
menu.CssClass = "menu";
menu.EnableViewState = false;
menu.ViewStateMode = System.Web.UI.ViewStateMode.Disabled;
menu.IncludeStyleBlock = false;
menu.Orientation = Orientation.Horizontal;
if (tabloidConfigMenu.configMenu != null)
{
foreach (tabloidConfigMenuItem item in configMenu)
{
menu.Items.Add((MenuItem)item);
}
}
configMenu.menu_=menu;
return menu;
}
在我的母版页中,我使用
protected void Page_Init(object sender, EventArgs e)
{
bool popupMode = Page.Request["mode"] == "popup";
if (!popupMode)
{
System.Web.UI.HtmlControls.HtmlLink cssLink = new System.Web.UI.HtmlControls.HtmlLink();
cssLink.Href = "~/Styles/Site.css";
cssLink.Attributes.Add("rel", "stylesheet");
cssLink.Attributes.Add("type", "text/css");
Page.Header.Controls.Add(cssLink);
//add menu
if (Tabloid.tabloidConfigMenu.configMenu != null)
{
Menu mn = (Menu)Tabloid.tabloidConfigMenu.configMenu.TopMenu;
mn.EnableViewState = false;
mn.ViewStateMode = System.Web.UI.ViewStateMode.Disabled;
Page.Master.FindControl("MenuHolder").Controls.Add(mn);
}
else
{
Label l = new Label();
l.Text = Tabloid.tabloidConfigMenu.lastError;
Page.Master.FindControl("MenuHolder").Controls.Add(l);
}
}
你有什么想法吗
谢谢你的帮助 我想您已经回答了自己的问题,错误告诉您在prerender事件处理程序中加载控件。顺便说一句,如果你是在asp.net上工作,请标记它。我尝试了,但我有相同的反应。我选择使用page_init,但总是相同的错误?我不明白为什么在我使用菜单时行为会有所不同,你能在配置菜单后发布加载控件的代码吗;