用户控件中的内容

Posted

技术标签:

【中文标题】用户控件中的内容【英文标题】:Content within a user control 【发布时间】:2011-04-16 23:30:26 【问题描述】:

我几乎不好意思问这个问题,但是我们开始......

我不是用户控件方面的专家,需要一些关于尝试实现特定所需功能的设计建议。

我们的目标是拥有一个用户控件,它将呈现为一个复杂的 html 元素和 css 结构,以形成一个优雅的容器框。问题在于如何填充框的内容,因为用户控件的每个实例都有自己的单独的 HTML 内容。用户控件的内容容器 div 将嵌套在呈现的 html 结构的深处。不希望以编程方式设置用户控件的内容或使用属性。

在伪代码中,所需的语法类似于:

<usercontrol Title="Some Title"><p>some random html content</p></usercontrol>

呈现的用户控件示例如下:

<div class="CommonBox">
    <div class="Title">Some Title</div>
    <div class="Content"><p>some random html content</p></div>
</div>

我希望我的解释是充分的。这对任何人都有意义还是无法实现所需的功能?

干杯!

编辑

我尝试了模板化的用户控制建议,希望能找到一个不错的解决方案。我“支持”this site,现在有了一个有效的模板化用户控件。我的下一个问题是,我如何以编程方式访问嵌套在模板中的控件...假设示例链接中的“描述”模板中有一个文本框控件,我想以编程方式设置它的值?这可能吗?

【问题讨论】:

【参考方案1】:

您正在寻找的东西绝对是可能的。一种解决方案是创建一个templated user control。最后,您可以定义类似于示例外观的内容。比如:

<uc:MyControl Title="Some TItle" runat="server">
    <ContentsTemplate>
        <p>some random html content</p>
    </ContentsTemplate>
</uc:MyControl>

Here's a simple how-to。我过去成功地做到了这一点。 found through Google 也有很多关于这个主题的资源。

【讨论】:

模板是一个很好的方法。我想知道是否有一种可靠且简单的方法可以做到这一点,但在使用控件时会节省一级元素。使用自定义控件很容易做到,但我还没有真正尝试过 .ascx 文件。 @Matti:我认为您可以创建一个基类,例如 TemplatedUserControl,它负责基本/通用功能。那么继承将是MyControl > TemplatedUserControl > UserControl。我已经将此方法用于其他常见的用户控制需求,并且效果很好.. @KP:不过,无论何时使用控件,您仍然需要&lt;ContentsTemplate&gt;。 IMO 如果自定义装饰的行为类似于 &lt;asp:Panel&gt; 并且您可以将其放在您的东西周围,那将是最好的(免责声明:我不支持使用 asp:Panel)【参考方案2】:

是的,这很有可能。 First you can create a custom control as I describe in this post. 控件中的属性成为示例中的“标题”之类的属性。然后,您可以使用 the technique shown in this post 扩展您的控件,为您需要的其他 html 输入添加子节点。

享受吧!

【讨论】:

我认为第二部分需要澄清,他希望在他的用户控件中包含任何内容,而不仅仅是特定对象。【参考方案3】:

您的自定义服务器控件似乎需要两个属性。

Title 属性来呈现第一个内部 div 的内容,

内容用于第二个。如果你想在你的服务器控件中设置内容,你应该为你的属性使用[PersistenceMode(PersistenceMode.InnerDefaultProperty)] 属性,像这样:

[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public string Contents

    get
    
        string contents = (string)ViewState["Contents"];
        return (contents == null) ? String.Empty : contents;
    
    set
    
        ViewState["Contents"] = value;
    

PersistenceModeAttribute 在 MSDN 中是这样解释的:

PersistenceModeAttribute 传递 内部默认属性参数 指定视觉设计师 应该坚持的财产 该属性作为内部应用 默认属性。这意味着一个 视觉设计师坚持属性 在控件的标签内。这 属性只能应用于一个 属性,因为只有一个属性 可以在控件的内部持久化 标签。属性值不 包裹在一个特殊的标签中。

欲了解更多信息,请查看the last example here。

【讨论】:

以上是关于用户控件中的内容的主要内容,如果未能解决你的问题,请参考以下文章

WPF在运行方法时更改用户控件中的按钮内容

WPF应用程序中,调用用户控件时,可以访问到在这个用户控件Xaml代码中的所有内容,这样岂不是不安全?

将内容编辑器 Web 部件添加到 sharepoint 2010 用户控件

通过WPF中的命令绑定使整个用户控件可单击

.net WinForm用户控件开发:用户控件的基本属性设置

引用包含在同一 VB.NET 项目中的用户控件