我几乎不好意思问这个问题,但我们走了......
我不是用户控件的专家,需要一些关于尝试实现特定所需功能的设计建议。
目标是让一个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,现在有一个工作模板化的用户控件。我的下一个问题是,如何以编程方式访问嵌套在模板中的控件...说明示例链接中的“描述”模板中有一个文本框控件,我想以编程方式设置其值?这可能吗?
答案 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。