C# 母版页继承另一母版页

C# 母版页继承另一母版页,c#,asp.net,C#,Asp.net,我在一个有很多母版页的网站上工作,其中一个母版页继承自另一个母版页,我正在尝试像这样向父母版页添加控件 myMasterPage.Page.Controls.Add(new LiteralControl(theSuperStoreString.ToString())); 但是我得到了以下错误 The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases. 我该

我在一个有很多母版页的网站上工作,其中一个母版页继承自另一个母版页,我正在尝试像这样向父母版页添加控件

myMasterPage.Page.Controls.Add(new LiteralControl(theSuperStoreString.ToString()));
但是我得到了以下错误

The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases.
我该怎么做


谢谢

我认为您尝试在循环中添加控件太晚了,请尝试preinit事件

当我读到你的评论时加上

这里是指向生命周期的链接


因此,本质上我们要说的是,您需要覆盖preinit事件并在那里添加/创建新控件,而不是稍后的事件(您当前似乎正在尝试添加这些事件)

我认为您尝试在循环中添加控件的时间太晚了,请尝试preinit事件

当我读到你的评论时加上

这里是指向生命周期的链接


因此,从本质上讲,我们要说的是,您需要覆盖preinit事件并在那里添加/创建新控件,而不是稍后的事件(您当前似乎正在尝试添加这些事件)

首先,您不应该向父控件添加任何控件。它违反了关注点分离原则,破坏了完整性,是不良设计(以及项目中的问题)的第一个标志

如果必须修改父控件或其他控件的控件,请使用事件、状态属性或接口将此请求委托给真正负责该请求的对象(在这种情况下为父母版页)


关于您的问题,请在父母版页中放置一个控件,并仅在有人请求时显示它。

首先,您不应向父控件添加任何控件。它违反了关注点分离原则,破坏了完整性,是不良设计(以及项目中的问题)的第一个标志

如果必须修改父控件或其他控件的控件,请使用事件、状态属性或接口将此请求委托给真正负责该请求的对象(在这种情况下为父母版页)



关于您的问题,请在父母版页中放置一个控件,并仅在有人请求时显示该控件。

尝试在初始化前阶段添加?对不起,我是一个新手,您是什么意思>?尝试在初始化前阶段添加?对不起,我是一个新手,你是什么意思>?问题是我需要先收集一些信息,我该如何处理?(对于我传递的字符串)@Superuser555如何传递字符串querystring和formpost?两者都应该仍然可用问题是我需要先收集一些信息,我该如何处理?(对于我传递的字符串)@Superuser555如何传递字符串querystring和formpost?请不要因为我的回答而生气,这不是我的重点。不要弄乱控件集合,而是尝试控制它们的可见性,这样可以节省您在这里的时间。问题是它们是这样的。。有一个.cs使用xsl创建某种收据,这是一个用户控件,然后将模板传递给一个子.MasterPage,但此母版页是从父.master继承的。。因此,我试图从用户控件的.cs代码访问该页面,以便在主体中放置javascript标记,它必须在主体中才能工作(基本上是googleAds javascript代码)Ok。如果您的master child.MasterPage继承自parent.MasterPage,则可以将受保护的方法添加到parent.MasterPage并从child.MasterPage调用它。此方法反过来使用作为参数传递给此方法的javascript填充控件。它有帮助吗?我要试一试,它能不能像受保护的void passValue(string s){//do the control thing here};像这样的?还是。。将LiteralControl放置在其应位于第一位的位置。而在方法体中只设置可见性和值。请不要对我的回答生气,这不是我的观点。不要弄乱控件集合,而是尝试控制它们的可见性,这样可以节省您在这里的时间。问题是它们是这样的。。有一个.cs使用xsl创建某种收据,这是一个用户控件,然后将模板传递给一个子.MasterPage,但此母版页是从父.master继承的。。因此,我试图从用户控件的.cs代码访问该页面,以便在主体中放置javascript标记,它必须在主体中才能工作(基本上是googleAds javascript代码)Ok。如果您的master child.MasterPage继承自parent.MasterPage,则可以将受保护的方法添加到parent.MasterPage并从child.MasterPage调用它。此方法反过来使用作为参数传递给此方法的javascript填充控件。它有帮助吗?我要试一试,它能不能像受保护的void passValue(string s){//do the control thing here};像这样的?还是。。将LiteralControl放置在其应位于第一位的位置。而在方法体中,只需设置可见性和值。