关于是否可以在用户控件中定义内容区域,我看到了两个关于我原始问题的建议,并且有一些有用的建议,即
Passing in content to ASP.NET user control
和
ASP.NET User Control inner content
现在,我喜欢后者的理论比仅仅出于美学原因更好。它似乎对我更有意义,但给出的示例使用了两个变量content和templateContent,而回答者在其示例代码中没有定义。没有这些细节,我发现这个例子不起作用。我猜他们是控件的属性?还是一些这样的?
编辑 - 详情:我想做什么
我需要一个ASP.Net用户控件来隐藏占位符内的面板中的某些内容,并要求在可见面板中输入代码。
基本上,用户会将他们的代码放入面板A中提供的文本框中并提交,将进行检查,如果有效,将显示面板B和锁定的内容。
我做了一个测试,其内容被硬编码到面板B中,但是一旦我需要使内容成为通用输入,它就会失败。如果它只是文本或某些,那么我可以使它成为控件的属性,但事实上,实际上,另一个用户控件我有一些困难,让它进入“隐藏”面板。
欢迎任何其他可行的解决方案。
编辑注意:我试图在2.0中实现这个解决方案我找到了一个我无法使用的3.5解决方案。
前一个例子似乎可行,但如果有人可以为我填空,我宁愿选择后者。
感谢。
答案 0 :(得分:24)
好的,所以这很令人不安,但是网上谈论这类事情的许多教程都会推动需要控件解析ListItem等的奢侈品。
所以这个解决方案纯粹是为了让你可以构建一个控件,无论出于什么原因,它都有一个占位符,里面可以有任何东西(有点像Master页面上的内容区域)。在这种情况下,恰好是因为包含占位符的Panel在另一个面板中发生了适当的输入操作之前是隐藏的。
首先,您需要添加:
[ParseChildren(true,"Content")]
[PersistChildren(false)]
就在控件的上方,如下所示:
public partial class MyControl : System.Web.UI.UserControl
然后在控件头部的控件范围声明中,您要声明:
private Control _content;
[PersistenceMode(PersistenceMode.InnerProperty)]
public Control Content { get { return _content; } set { _content = value; } }
最后,您需要将内容放入占位符,如下所示:
phContent.Controls.Add((Control)_content);
最后一行进入Page_Init事件。作为参考,“phContent”是您希望内容显示的占位符的名称,如下所示:
<asp:Panel ID="pnlLockable" runat="server" Visible="False">
<asp:Placeholder runat="server" ID="phContent" />
</asp:Panel>
在前端,生成的实现如下所示:
<uc:MyControl runat="server" ID="lockit1">
<Content>
//...your stuff goes here...
</Content>
<uc:MyControl>
请注意,我认为内容标记之间的内容是根控件。这是因为我在那里嵌套了另一个用户控件。我想如果你在面板或占位符中放置你想要的任何内容,它应该没问题。
答案 1 :(得分:0)
您也可以阅读“How to: Create Templated ASP.NET User Controls”。真有帮助。