Is it possible to use LabelFor for header row in Index view

后端 未结 2 932
谎友^
谎友^ 2021-01-05 18:21

I am trying to leverage DataAnnotation values in ASP.NET MVC Index view. Interesting, code generator uses field names (eg., BlogPost) as opposed to Html.LabelFor(m =&g

相关标签:
2条回答
  • 2021-01-05 18:45

    You should, at the very least, be able to get what you want by using a partial view (ascx for WebForms) or a Display/Editor template. In your index page you can loop over your enumerable and pass the item into either a partial view or a template.

    There may be a way to do it without having do as I've suggested (and I would be interested in seeing the answer), but what I've suggested should work fine.

    EDIT:

    After some clarification, here is my updated answer.

    You can still get the label for a property while still respecting the DisplayAttribute in data annotations. I tried this real quick and it seems to work fine.

    In my view I have the following:

    Html.LabelFor(m => m.BlogPosts.First().BlogPostTitle)
    

    This worked even if there were no items in the enumeration itself. When I first tested this I got the property name, then I added decorated the property with the DisplayAttribute and the value of the name property was displayed instead of the standard property name.

    0 讨论(0)
  • 2021-01-05 18:54

    In MVC 4, the HtmlHelper extensions in the DisplayNameExtensions class allows the following (this is the default scaffolding of a list with column headings)

    @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>
    ...
    

    This is because DisplayNameFor has overloads for both TModel and 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);
    
    0 讨论(0)
提交回复
热议问题