【问题标题】:MasterPages Inherit another MasterPage母版页继承另一个母版页
【发布时间】:2011-06-28 19:24:43
【问题描述】:

我正在开发一个有许多 MasterPages 的网站,其中一个从另一个母版页继承,我正在尝试像这样向父母版页添加控件

myMasterPage.Page.Controls.Add(new LiteralControl(theSuperStoreString.ToString()));

但我收到以下错误

The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases.

我该怎么做?

谢谢

【问题讨论】:

  • 尝试在 PreInit 阶段添加?
  • 对不起,我是新手,什么意思>?

标签: c# asp.net


【解决方案1】:

首先,您不应该将任何控件添加到您的父控件。它违反了关注点分离原则,破坏了完整性,并且是糟糕设计(以及项目中的麻烦)的第一个迹象。

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

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

【讨论】:

  • 请不要对我的回答有任何冒犯,这不是我的意思。摆脱控制集合的混乱并尝试控制它们的可见性,而不是在这里节省您的时间。
  • 问题是他们有这样的.. 有一个 .cs 使用 xsl 创建某种收据,这是一个用户控件,然后将模板传递给孩子.MasterPage,但是这个母版页是从 parent.Master 继承的。所以我试图从用户控件的 .cs 代码访问该页面,以便在正文中放置一个 javascript 标记,它必须在正文中它可以工作(基本上是它的 googleAds javascript 代码)
  • 好的。如果您的主 child.MasterPage 从 parent.MasterPage 继承,您可以将受保护的方法添加到您的 parent.MasterPage 并从 child.masterPage 调用它。该方法反过来用作为参数传递给该方法的 javascript 填充控件。有帮助吗?
  • 我要试一试,可以像 是这样的吗?
  • Still.. 将 LiteralControl 放在应该放在首位的位置。比在方法体中只需设置可见性和值。
【解决方案2】:

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

在我阅读您的评论时添加

这是生命周期的链接

http://msdn.microsoft.com/en-us/library/ms178472.aspx

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

【讨论】:

  • 问题是我需要先收集一些信息,我该如何处理? (对于我传递的字符串)
  • @Superuser555 你是如何传递字符串、查询字符串、表单帖子的?两者都应该仍然可用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多