在复杂对象列表上使用UIHint批注?

时间:2018-07-25 21:45:21

标签: c# asp.net-mvc asp.net-mvc-5

我想对视图模型中包含的列表中的每个复杂元素使用UIHint。我目前可以使用@Html.DisplayFor(a => a.ContentElements[0], "MYContent"),但想将提示移到实际的视图模型中,而不是在Html.DisplayFor帮助器中。按原样构建的视图模型是否可以实现?

我的视图模型:

 public class MyViewModel
{
    public int PageId { get; set; }
    public IList<ContentElement> ContentElements { get; set; }
}

我的复杂元素:

 public class ContentElement 
{
    public int ContentId { get; set; }
    public string Content { get; set; }
}

MYContent模板:

@model  ContentElement
@if (HttpContext.Current.IsDebuggingEnabled){

<span>@Model.ContentId</span>
}
@Html.Raw(Model.Content)

1 个答案:

答案 0 :(得分:1)

在这种情况下,没有理由使用[UIHint](如果这样做,则需要将模板更改为使用@model List<ContentElement>)。只需要将模板命名为ContentElement.cshtml(以匹配类的名称),然后将其放置在/Views/Shared/DisplayTemplates(或/Views/{ControllerName}/DisplayTemplates)文件夹中,然后在视图中使用

@Html.DisplayFor(m => m.ContentElements)

但是,如果您确实想使用[UIHint],则可以将其应用于ContentElements属性

public class MyViewModel
{
    public int PageId { get; set; }
    [UIHint("MYContent")]
    public IList<ContentElement> ContentElements { get; set; }
}

但是因为ContentElementsList<ContentElement>,那么这意味着模板中的模型必须是@model List<ContentElement>(而不是@model ContentElement