4

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

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

目标是拥有一个用户控件,它将呈现为 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>

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

干杯!

编辑

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

4

3 回答 3

3

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

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

这是一个简单的操作方法。我过去成功地做到了这一点。通过 Google也可以找到很多关于该主题的资源。

于 2010-09-24T20:26:32.420 回答
0

是的,这是很有可能的。 首先,您可以创建一个自定义控件,正如我在这篇文章中描述的那样。 控件中的属性成为示例中的“标题”之类的属性。然后,您可以使用本文中显示的技术扩展您的控件,为您需要的其他 html 输入添加子节点。

享受!

于 2010-09-24T20:23:48.653 回答
0

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

用于渲染第一个内部 div 内容的Title属性,

第二个的内容。如果要在服务器控件中设置内容,则应[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 参数指定可视化设计器应将应用属性的属性作为内部默认属性保留。这意味着可视化设计器将属性保留在控件的标记中。该特性只能应用于一个属性,因为控件的标签中只能保留一个属性。属性值未包含在特殊标记中。

有关更多信息,请查看此处的最后一个示例

于 2010-09-24T20:28:34.570 回答