mvc3生成的视图中元素和类结构的原因是什么?

时间:2011-10-06 19:48:43

标签: html css semantics

所以我们正在讨论MVC3中默认生成的视图的优点。它包装这样的模型字段;

    <div class="editor-label">
        @Html.LabelFor(model => model.SenderMessage)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.SenderMessage)
        @Html.ValidationMessageFor(model => model.SenderMessage)
    </div>

一位同事说编辑标签div不应该在那里。 label元素具有足够的语义含义。他希望看到这样:

  <p>
        @Html.LabelFor(model => model.SenderMessage)
        @Html.EditorFor(model => model.SenderMessage)
        @Html.ValidationMessageFor(model => model.SenderMessage)
  </p>

如果由我决定,我可能会倾向于这样的事情。 (是的,我知道我可以用t4自定义它。)

<div class="model-field">
   <div class="editor-label">
       @Html.LabelFor(model => model.SenderMessage)
   </div>
   <div class="editor-field">
       @Html.EditorFor(model => model.SenderMessage)
       @Html.ValidationMessageFor(model => model.SenderMessage)
   </div>  
</div>  

为什么第一种方式比后两种方式更好?

2 个答案:

答案 0 :(得分:2)

像MVC3这样的框架尝试成为每个人的一切。因此,他们生成的代码往往有点过度设计。

这几乎适用于所有框架,CMS和网站设计师应用程序;如果您查看网络上绝大多数网站的生成代码,您会看到结构过度的HTML,因为它是由代码生成器创建的,而不是手写的。

在许多情况下,可以更改模板或引擎以生成更干净的代码,但通常有很好的理由说明生成器默认创建它们所执行的代码。

例如,考虑一个在标签和字段上执行一些聪明的jQuery效果的网站。使用包装<div>元素可能会更容易实现一些效果。

框架设计人员采取了谨慎的方法并对其进行了过度结构化,因为这为最终用户(即开发人员)以不同方式使用它提供了最大的灵活性。从纯粹主义者的角度来看,更清洁的HTML可能更好,但额外加价的影响很小,增加的灵活性是明显的胜利。

答案 1 :(得分:1)

我喜欢

<fieldset>
    <div class="model-field">
        <label />
        <input />
    </div>
    <div class="model-field">
        <label />
        <input />
    </div>
    <div class="model-field">
        <label />
        <input />
    </div>
</fieldset>

仅仅因为DIV似乎是最符合语法的方式。

虽然有些人认为表单项应该在<ul><dl>列表中显示,但我不确定是否同意。特别是如果禁用CSS。

我也不太热衷于使用<p>