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

ber*_*ert 10 c# asp.net user-controls

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

将内容传递给ASP.NET用户控件

ASP.NET用户控件内部内容

现在,由于美学原因,我比前者更喜欢后者的理论.它似乎对我更有意义,但给出的示例使用了两个变量content和templateContent,而回答者在其示例代码中没有定义.没有这些细节,我发现这个例子不起作用.我猜他们是控件的属性?还是一些这样的?

编辑 - 细节:我想做什么

我需要一个ASP.Net用户控件来隐藏占位符内的面板中的某些内容,并要求在可见面板中输入代码.

用户基本上将他们的代码放入面板A中提供的文本框中并提交它,将对其进行检查,如果有效,将显示面板B和锁定的内容.

我已经做了一个测试,其内容被硬编码到面板B中,但是一旦我需要使内容成为通用输入,它就会失败.如果它只是文本或某些,那么我可以使它成为控件的属性,但事实上,实际上,另一个用户控件我有一些困难,让它进入"隐藏"面板.

还欢迎任何其他可行的解决方案.

编辑注意:我试图在2.0中实现这个解决方案我找到了一个我无法使用的3.5解决方案.

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

谢谢.

ber*_*ert 24

好吧,所以这很令人不安,但是网上谈论这种事情的许多教程都会推动做奢侈的事情,需要控件来解析ListItems等等.

所以这个解决方案纯粹是为了让你可以构建一个控件,无论出于什么原因,它都有一个占位符,里面可以有任何东西(有点像Master页面上的内容区域).在这种情况下,恰好是因为包含占位符的Panel在另一个面板中发生了适当的输入操作之前是隐藏的.

首先,你需要添加:

[ParseChildren(true,"Content")]
[PersistChildren(false)]
Run Code Online (Sandbox Code Playgroud)

就在控件的上方,如下所示:

public partial class MyControl : System.Web.UI.UserControl
Run Code Online (Sandbox Code Playgroud)

然后在控件头部的控件范围声明中,您要声明:

private Control _content;

[PersistenceMode(PersistenceMode.InnerProperty)]
public Control Content { get { return _content; } set { _content = value; } }
Run Code Online (Sandbox Code Playgroud)

最后,您需要将内容放入占位符,如下所示:

phContent.Controls.Add((Control)_content);
Run Code Online (Sandbox Code Playgroud)

最后一行进入Page_Init事件.作为参考,"phContent"是您希望内容显示的占位符的名称,如下所示:

<asp:Panel ID="pnlLockable" runat="server" Visible="False">
<asp:Placeholder runat="server" ID="phContent" />
</asp:Panel>
Run Code Online (Sandbox Code Playgroud)

在前端,生成的实现如下所示:

<uc:MyControl runat="server" ID="lockit1">
<Content>
//...your stuff goes here...
</Content>
<uc:MyControl>
Run Code Online (Sandbox Code Playgroud)

请注意,我认为内容标记之间的内容是根控件.这是因为我在那里嵌套了另一个用户控件.我想如果你在面板或占位符中放置你想要的任何内容,它应该没问题.

  • +1使用"令人不安的容易"这两个词. (5认同)