在代码中生成表单元素

时间:2014-09-15 02:41:34

标签: c# asp.net forms design-patterns architecture

我有一个网页应用,几乎每个页面都有一个表单。为了确保每个表单呈现相同,以便更改更容易,我想在中心位置渲染c#中的所有表单控件,所以如果我需要在输入中添加类或更改某些内容,我只需要做一次。

目前,我只是使用一些静态类,如TextInputHelper,CheckboxInputHelper等,它们使用StringBuilder构建HTML并将字符串返回给我的视图。

例如,我的所有表单控件都是基本形式:

<section>
    <label class="label">Label Text</label>
    <label class="input">
        ...Input Element...
    </label>
</section>

我想要做的是改善这种情况,因为我在不同的帮助器类之间仍然存在很多重复,特别是对于表单元素的包装器。我最初的想法是创建一个名为BaseFormControl的类,它具有一个虚拟的Render方法,该方法具有控件的外包装,然后创建其他类来实现它,以执行特定的操作,例如放置的TextFormControl

<input type="text"..... 

在包装器内。

我是否在正确的道路上,和/或是否有适合我想做的设计模式?

1 个答案:

答案 0 :(得分:0)

从我的POV中我读到的是,由于CSS / HTML标准化很容易从客户端解决,因此您使服务器端变得复杂。

如果您仍想使用服务器端方法,那么适用于您的方法的模式是Adapter(Wrapper)模式,这意味着您可能希望创建控件包装器clases以满足您呈现的每个控件的需求与ASP.NET内置控件提供的不同的HTML。

如果您想要做的是格式化一组控件,那么UserControl就是更好的方法。

请记住,ASP.NET的构建精神是试图保持层与View分离,因此任何从服务器端生成html的尝试都必须是例外而不是规则。