【发布时间】:2011-04-19 19:47:57
【问题描述】:
基于服务器的控件对我来说不是很好的解决方案,因为默认情况下我的面板应该始终包含一个 asp 复选框,这将允许用户隐藏和显示面板内容。
我将面板创建为模板化用户控件,但现在我遇到无法在其中声明变量的问题。
[ParseChildren(true)]
public partial class MyPanel: System.Web.UI.UserControl
{
private ITemplate messageTemplate = null;
[TemplateContainer(typeof(MessageContainer))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate Content
{
get
{
return messageTemplate;
}
set
{
messageTemplate = value;
}
}
void Page_Init()
{
MessageContainer container = new MessageContainer();
messageTemplate.InstantiateIn(container);
PlaceHolder1.Controls.Add(container);
}
[ParseChildren(true)]
public class MessageContainer : Control, INamingContainer
{
internal MessageContainer()
{
}
}
}
如果我在 MyPage.aspx 中执行以下操作,则控件定义不插入到 MyPage.aspx.designer.cs 中,它们通常会这样做:
<my:MyPanel>
<Content>
<asp:TextBox id = "foo" runat="server" />
</Content>
</my:MyPanel>
因此foo不是设计者创建的控制变量,所以我无权访问它。
如何创建自己的允许在其中声明控件的面板?
编辑:
我现在尝试使用[ParseChildren(false)]。包含变量的变量现在在表单的设计器代码中生成。现在的问题是messageTemplate.InstantiateIn(container) 抛出了异常。
【问题讨论】:
-
不,我的问题有所不同,至少我不会接受其他问题的答案。
标签: c# asp.net user-controls panel