用户控件中的内容

5

我有点不好意思问这个问题,但还是问一下吧...

我对用户控件并不是很熟悉,需要一些设计建议来实现特定的功能。

目标是创建一个用户控件,它将呈现为一个复杂的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>

我希望我的解释足够清晰。这对任何人来说都有意义吗,还是所需功能无法实现?
祝好!
编辑
我尝试使用模板用户控件建议以期达到一个不错的解决方案。我查看了这个网站的历史记录,并获得了一个可用的模板用户控件。我的下一个问题是,如何以编程方式访问嵌套在模板中的控件...例如,在示例链接中,“描述”模板中有一个文本框控件,我想通过编程方式设置它的值,这是可能的吗?
3个回答

4

您要寻找的内容是完全可能实现的。一种解决方案是创建一个模板化用户控件。最终,您可以定义与您的示例类似的内容。例如:

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

这里有一个简单的操作方法。我过去成功地完成了这个操作。同样,通过谷歌搜索也可以找到关于这个话题的许多资源。


模板是完成这个任务的好方法。但我在想,如果能够不用模板也有可靠且简单的方法就更好了,这样可以减少在使用控件时的元素级别。自定义控件很容易实现此功能,但我还没有试过在 .ascx 文件中实现该功能。 - Matti Virkkunen
@Matti:我认为你可以创建一个名为TemplatedUserControl的基类,它负责处理基本/常见功能。继承关系应该是MyControl > TemplatedUserControl > UserControl。我已经在其他常见用户控件需求中使用了这种方法,效果非常好。 - KP.
@KP:无论何时使用您的控件,仍需要<ContentsTemplate>。我认为,如果自定义装饰效果像<asp:Panel>那样,您只需将其放在您的内容周围会更好(免责声明:我不赞成使用asp:Panel)。 - Matti Virkkunen

0

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

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

Content 属性用于呈现第二个内部 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参数指定可视化设计器应将属性持久化到应用了该属性的内部默认属性。这意味着可视化设计器将属性保留在控件标记内。该属性只能应用于一个属性,因为只有一个属性可以在控件标记内持久化。属性值不会被包装在特殊标记中。

欲了解更多信息,请参见此处的最后一个示例


0

我认为第二部分需要澄清,他希望在用户控件中拥有任何内容,而不仅仅是特定的对象。 - Matti Virkkunen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接