Ale*_*lex 25 asp.net-mvc html-helper razor
在我的模型中,我有一个实体
public class Carrier
{
public Guid CarrierId { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我也有一个ViewModel
public class CarrierIndexViewModel
{
public IEnumerable<Carrier> Carriers { get; set; }
public PagingInfo PagingInfo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个强类型(CarrierIndexViewModel)索引视图,它假设使用PagingInfo显示Carrier表.
我正在尝试使用Html帮助器在我的表头中显示Carrier.Name当我使用IEnumerable作为此视图的模型时,我有
@Html.DisplayFor(model => model.Name)
如何使用我的新CarrierIndexViewModel显示Carrier.Name的标题?
Red*_*Taz 39
我发现不需要辅助方法,额外的代码或循环遍历集合.我刚刚使用了以下内容:
@Html.DisplayNameFor(model => model.Carriers.FirstOrDefault().Name)
Run Code Online (Sandbox Code Playgroud)
这仍然有效,即使它FirstOrDefault()会返回,null因为它只查找元数据,Name属性本身不被访问.
非常感谢@Kurian启发了这个答案.
Mat*_*cic 17
我有一个类似的问题,因为我不想手工输入我的列名,所以我写了一个帮手:
public static IHtmlString DisplayColumnNameFor<TModel, TClass, TProperty>
(this HtmlHelper<TModel> helper, IEnumerable<TClass> model,
Expression<Func<TClass, TProperty>> expression)
{
var name = ExpressionHelper.GetExpressionText(expression);
name = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(
() => Activator.CreateInstance<TClass>(), typeof(TClass), name);
return new MvcHtmlString(metadata.DisplayName);
}
Run Code Online (Sandbox Code Playgroud)
然后在视图中你会称之为
@Html.DisplayColumnNameFor(Model.Carriers, m => m.Name)
Run Code Online (Sandbox Code Playgroud)
请注意,您可以使用接受名称的显示属性和许多其他自定义,如资源文件等.
public class Carrier
{
[Display(Name="Carrier ID")]
public Guid CarrierId { get; set; }
[Display(Name="Carrier Name")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您可以在View中添加@using语句以指定Carrier类型,然后您需要遍历Model的Carriers属性.
您的视图看起来像......
@model CarrierIndexViewModel
@using Carrier
@foreach(Carrier c in Model.Carriers)
{
@Html.DisplayFor(model => c.Name)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33288 次 |
| 最近记录: |