【问题标题】:ASP.Net: User control with content area, it's clearly possible but I need some detailsASP.Net:内容区域的用户控制,这显然是可能的,但我需要一些细节
【发布时间】:2010-04-27 09:21:38
【问题描述】:

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

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

前一个例子似乎可行,但如果有人可以为我填补空白,我更愿意使用后者。

谢谢。

【问题讨论】:

    标签: c# asp.net user-controls


    【解决方案1】:

    好的,这很容易令人不安,但是网络上很多讨论这种事情的教程都在推动做一些需要控制来解析 ListItems 等的奢侈的事情。

    因此,此解决方案纯粹是为了让您可以构建一个控件,无论出于何种原因,其中都有一个占位符,其中可以包含任何内容(有点像母版页上的内容区域)。在这种情况下,这恰好是因为包含占位符的面板是隐藏的,直到在另一个面板中发生了适当的输入操作。

    首先,你需要添加这个:

    [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>
    

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

    【讨论】:

    • 谢谢。我经常发现,在尝试做一些相当复杂的在线教程时,往往会将简单钝化的解释极端化。最后,一旦您了解了基本概念,这将是非常明显的,但我从未真正考虑过这些概念,因此所有向您展示如何构建模板重复器和定制列表的教程都是不合适的,因为我不知道是什么最低限度的实施是。因此,令人不安的容易。
    • 我喜欢这个,但有什么办法可以消除设计时错误?
    • 我知道答案很旧,但它很有帮助。我们可以为Control 使用自动属性并跳过(Control)_control 中的演员表吗?
    【解决方案2】:

    您还可以阅读“How to: Create Templated ASP.NET User Controls”。真的很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2019-04-02
      • 2021-12-11
      • 2012-02-24
      • 2016-08-08
      • 1970-01-01
      • 2018-07-31
      相关资源
      最近更新 更多