对于想要将一切都变成.NET控件的人,你会怎么说?

时间:2009-02-25 19:14:15

标签: asp.net custom-controls

例如,我们有一些CSS规则来定义表单布局。我们使用以下标记:

<div class="foo">
    <label class="bar req">Name<em>*</em></label>
    <span>
        <asp:TextBox runat="server"/>
            <label>First</label>
    </span>
    <span>
        <asp:TextBox runat="server"/>
            <label>Last</label>
    </span>
    <div class="clear"></div>
</div>

在我看来,这是完美的标记。遵循这些规则并不是一种负担,因为无论如何你都应该担心干净,正确的标记。建议我们使用类似于以下内容的控件“强制执行”这些规则:

<x:FormField runat="server" Label="Name" Required="True">
    <x:TextBox runat="server" hint="First"/>
    <x:TextBox runat="server" hint="Last"/>
</x:FormField>

我的直觉告诉我XHTML标记是我们的朋友,而不是我们的敌人。两个问题:

  1. 我完全偏离抵抗 制作所有这些自定义控件 只是为了发出标记?
  2. 如果您同意 和我在一起,你会有什么理由 给?

9 个答案:

答案 0 :(得分:17)

我投票使用控件,因为如果该标记发生了变化(比如你想在框中添加一些不错的jQueryUI效果或添加一个RequiredFieldValidator控件),你可以在一个地方进行更改并完成它。 DRY。

答案 1 :(得分:7)

反对控制:

  • 演出编号。测量基线XHTML页面和相同的页面,其上有20个控件,它们发出相同的标记。这会给你一个估计。
  • 额外费用。您需要考虑开发,测试和维护这些控制的成本。

对于控件:

  • 一致性。现在,您只需一个地方就可以控制XHTML结构,并使用您需要的所有元素,并且它将在所有页面中保持一致。
  • 回归。您可以进行适当的单元和场景测试,以确保您的XHTML结构符合您的要求。
  • 重用。您将来可以在其他项目中重复使用相同的控件。

答案 2 :(得分:4)

我会说“不要成为抽象宇航员”又名“建筑宇航员”

进一步阅读:http://www.joelonsoftware.com/articles/fog0000000018.html

答案 3 :(得分:1)

根据这个确切的例子,我可以根据个人经验与你站在一起。它可能不适用于其他场景,但标签+文本框应该保持分开。通常一切都很好,直到你通过项目大约2/3,其他人开始批判性地审查它。我的经验是用户/经理/ ui设计师在许多地方都需要例外 - 不同的间距,标签和文本框之间的额外内容等。还要记住验证例程和一个验证器不适合ASP.NET中的所有大小。当你得到这样一个工作控件来处理所有不同的场景时,在表单上保留label + textbox可能就不那么重要了。

答案 4 :(得分:0)

通过CSS“强制执行”外观,花费更少的时间,支持,维护和白发。复合控件没有任何固有的“强制执行”(这是你的第二个代码片段。)然而,自定义控件还有很多工作要做。

底线:自定义控件是关于重用和重新分配,而不是布局。

答案 5 :(得分:0)

我做了类似的事情。把它带到极端,你在页面上有30-40个像这样的控件。拥有控制标签,验证器等的控件可以让您的生活更轻松。

我们还有自动表单助手,可以将表单值加载到对象上,反之亦然,以减轻所有

lefthand = righthand代码遍布整个地方。

答案 6 :(得分:0)

如果您打算重新使用代码,或者如果您希望在代码上定义自定义属性或属性,则使用自定义控件可能是一个不错的选择,但除此之外毫无意义。

答案 7 :(得分:0)

我同意Franci ......有充分的理由使用这样的控件。但是,不要把它带到极端。如果你被告知一切应该是一个控件并在一个单独的文件中编译,那么有人会盲目地执行一项策略而不使用常识。只有适用的政策才有效。在不适用的情况下应用政策(或编码模式)通常会导致噩梦。

其他人已经说过,但我在这里回答的原因是要指出一件特别的事情。如果您是初级开发人员并且有一位资深人士告诉您以某种方式做事 - 您就是这样做的。他们有可能知道您不了解的要求,或者他们没有告诉您的环境问题。有很多次我告诉一个初级开发人员“只是按照这种方式做”而没有很多解释原因 - 因为我们只需要完成它,给他们一个编程课是我没有时间的。我会经常回去向他们解释一下,但是当一个项目落后于时间表时(他们总是如此),你会做你所说的话并在以后争论。

答案 8 :(得分:0)

我会说这取决于控件的使用量,它只是在一个项目中,还是需要在其他项目中发布?并且用户控件有什么问题?你获得了可重用性+你仍然有标记