用户控件中的内容

时间:2010-09-24 20:12:54

标签: c# asp.net user-controls servercontrols

我几乎不好意思问这个问题,但我们走了......

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

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

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

<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,现在有一个工作模板化的用户控件。我的下一个问题是,如何以编程方式访问嵌套在模板中的控件...说明示例链接中的“描述”模板中有一个文本框控件,我想以编程方式设置其值?这可能吗?

3 个答案:

答案 0 :(得分:3)

你正在寻找的东西绝对是可能的。一种解决方案是创建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

答案 1 :(得分:0)

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

享受!

答案 2 :(得分:0)

您的自定义服务器控件看起来需要两个属性。

标题属性,用于呈现第一个内部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传递   InnerDefaultProperty参数   指定一个可视化设计师   应该坚持财产到哪   该属性作为内部应用   默认属性。这意味着一个   视觉设计师坚持财产   在控件的标签内。该   属性只能应用于一个   财产,因为只有一个财产   可以在控件内持久化   标签。属性值不是   包裹在特殊标签中。

有关详细信息,请查看the last example here