Fel*_*lix 5 asp.net-mvc data-annotations
我试图在ASP.NET MVC索引视图中利用DataAnnotation值.有趣的是,代码生成器使用字段名称(例如,BlogPost)而不是Html.LabelFor(m => Model.ColumNames["BlogPost"])类似的东西(我编写了它).
这是否意味着,如果Model是IEnumerable(如在Index视图中),那么就不可能获得DataAnnotation指定的Display Name?难以置信...
我的代码目前是MVC 2和MVC 3的混合,如果它有任何区别.
Bri*_*all 15
至少,你应该能够通过使用局部视图(ascx for WebForms)或显示/编辑器模板来获得你想要的东西.在索引页面中,您可以循环遍历可枚举项,并将项目传递到局部视图或模板中.
可能有一种方法可以做到这一点,而没有像我建议的那样(我会有兴趣看到答案),但我建议应该工作正常.
编辑:
经过一些澄清,这是我更新的答案.
您仍然可以获取属性的标签,同时仍然尊重DisplayAttribute数据注释.我试过这个很快,似乎工作得很好.
在我看来,我有以下几点:
Html.LabelFor(m => m.BlogPosts.First().BlogPostTitle)
Run Code Online (Sandbox Code Playgroud)
即使枚举本身没有项目,这也有效.当我第一次测试这个时,我得到了属性名称,然后我添加了属性装饰,DisplayAttribute并显示了name属性的值而不是标准属性名称.
在MVC 4中,DisplayNameExtensions类中的HtmlHelper扩展允许以下内容(这是带列标题的列表的默认支架)
@model IEnumerable<Entity.Foo>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Bar)
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Bar)
</td>
...
Run Code Online (Sandbox Code Playgroud)
这是因为DisplayNameFor有两种重载TModel和IEnumerable<TModel>:
public static MvcHtmlString DisplayNameFor<TModel, TValue>
(this HtmlHelper<IEnumerable<TModel>> html,
Expression<Func<TModel, TValue>> expression);
public static MvcHtmlString DisplayNameFor<TModel, TValue>
(this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4839 次 |
| 最近记录: |