所以我们正在讨论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>
为什么第一种方式比后两种方式更好?
答案 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>
。