ASP.Net:用户控制内容区域,显然可行,但我需要一些细节

时间:2010-04-27 09:21:38

标签: c# asp.net user-controls

关于是否可以在用户控件中定义内容区域,我看到了两个关于我原始问题的建议,并且有一些有用的建议,即

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解决方案。

前一个例子似乎可行,但如果有人可以为我填空,我宁愿选择后者。

感谢。

2 个答案:

答案 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”。真有帮助。