只是想知道人们如何以及何时使用编辑器/显示模板与Html助手。具体来说,我所说的是它用于渲染不同的UI控件而不是渲染实体。
例如,我有类似下面的atm:
<tr>
<th><%= Html.LabelFor(x => x.ActivityTypeId) %></th>
<td><%= Html.EditorFor(x => x.ActivityTypeList, "MultiSelectDropDownList")%></td>
</tr>
<tr>
<th><%= Html.LabelFor(x => x.Name) %></th>
<td><%= Html.EditorFor(x => x.Name) %></td>
</tr>
<tr>
<th><%= Html.LabelFor(x => x.Description) %></th>
<td><%= Html.DisplayFor(x => x.Description, "DisplayString")%></td>
</tr>
但是最近我想知道我是否应该这样做:
<tr>
<th><%= Html.LabelFor(x => x.ActivityTypeId) %></th>
<td><%= Html.MultiSelectDropDownList(x => x.ActivityTypeList)%></td>
</tr>
<tr>
<th><%= Html.LabelFor(x => x.Name) %></th>
<td><%= Html.EditorFor(x => x.Name) %></td>
</tr>
<tr>
<th><%= Html.LabelFor(x => x.Description) %></th>
<td><%= Html.DisplayString(x => x.Description)%></td>
</tr>
但是,如果我使用第二个选项是使用中间编辑器的重点...我将使用Html.Textbox,并且能够设置我喜欢的任何html属性。
我对人们在这里使用的模式感兴趣......有什么想法吗?
干杯 安东尼
答案 0 :(得分:5)
EditorFor和DisplayFor是MVC 2最强大的方面,我认为应该尽可能多地使用和滥用。
跳转到Brad Wilsons博客并查看如何扩展对象模板以快速从带有属性的ViewModel中删除基于约定的屏幕: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-5-master-page-templates.html
我在当前项目中使用这种技术,到目前为止还没有为单个屏幕编写过一行HTML。 :d
答案 1 :(得分:0)
我非常喜欢第二个。
它很优雅,让你摆脱那些笨拙的字符串:)
答案 2 :(得分:0)
我已修改(实际上,在修改过程中)T4 Edit
,Create
和View
模板以吐出我想要的代码。该代码不使用任何DisplayFor
或EditorFor
方法。我没有深入研究这些方法的代码,但我相当肯定你会看到那里有一些反思。我修改过的模板目前会生成TextBoxFor
,DropDownListFor
和CheckBoxFor
。
如果您愿意,可以使用javar提到的Brad Wilson帖子中的方法。至少我会让模板使用DisplayFor
或EditorFor
为每个字段吐出代码,以便稍后返回可以更改为特定编辑器,并为输入字段添加任何必要的属性。