我该如何创建具有可变布局的用户控件?

时间:2010-10-13 17:48:34

标签: asp.net

我有一个包含许多子控件的用户控件。我希望能够通过用户控件的属性更改控件的布局(即更改子控件周围的标记),但我不想自己复制子控件。这排除了在每个视图中使用具有不同版本布局的MultiView,因为在这种情况下我必须复制控件。我还宁愿使用标记而不是直接发出控件的代码(就像你在服务器控件中那样)。

举一个人为的例子,说我有一个标签和一个文本框。在一个布局中,我希望标签和文本框由div包含并相互叠加。在另一种布局中,我希望它们并排放在表格中。

我应该继续并在每个视图之间复制控件吗?这似乎违反了DRY原则,但我不确定我是否有很多选择。部分解决方案是将多视图的视图用于命名容器,这样我至少可以节省自己为重复控件ID添加前缀以使其独特的时间。

谢谢!如果上述内容没有意义,请随时询问。

3 个答案:

答案 0 :(得分:1)

您可以使用templated user control为用户控件的每个部分定义页眉和页脚模板。从那里,您可以在用户控件上使用CSS和/或公共属性来设置控件的预定义(非模板化)组件的样式。

答案 1 :(得分:1)

听起来好像你应该继续创建服务器控件而不仅仅是用户控件。您必须在代码中创建标记,但它会为您提供最大的灵活性。

答案 2 :(得分:1)

一个想法是创建第二个用户控件,即使用设计文件中的第一个克隆,但具有相同的代码文件。

FileLayout1.ascx
FileLayout2.ascx

both of this have
CodeFile="FileLayout1.ascs.cs" Inherits="FileLayout1"

FileLayout1.ascs.cs

您可以加载1或2。

限制/问题是ascx必须具有完全相同的控件名称,并且您具有相同的控件2次(但代码只有一次)

从我的观点来看,好的想法是你可以随意设计你想要的布局。