有没有办法写下这样的东西:
@Html.LabelFor(typeof(StackViewModel), "SomeProperty")
我正在生成一个表(但不能使用@ Html.TableFor)并希望使用@ Html.LabelFor来生成表列标题,但由于该表可能有也可能没有任何行,我没有一个可以使用的对象,只是该对象的类型。
编辑:为了澄清,我正在寻找使用typeof(),因为我的情况是这样的:
@Html.LabelFor(Model.TableRows.First().Id)
如果" TableRows"没有行,.First()
抛出。
答案 0 :(得分:2)
如果您想使用非通用Html
助手并传递Type
和属性名称,您可以选择创建此类扩展方法:
public static MvcHtmlString DisplayNameFor(this HtmlHelper html,
Type modelType, string expression)
{
var metadata = ModelMetadataProviders.Current
.GetMetadataForProperty(null, modelType, expression);
return MvcHtmlString.Create(metadata.GetDisplayName());
}
然后你可以这样使用它:
@Html.DisplayNameFor(typeof(Sample.Models.Category), "Id")
注意:强>
IEnumerable<T>
类型且您可以对x=>x.Id
等属性使用lambda表达式,则可以使用@Html.DisplayNameFor(x=>x.Id)
。如果Model
为null或没有行,它也可以工作。答案 1 :(得分:1)
@if(Model != null)
{
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Id)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.LastName)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelitem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
</tr>
}
</table>
}
或者您可以将@Html.DisplayNameFor
替换为@Html.LabelFor
。
为什么不呢?