Search code examples
asp.net-mvcasp.net-mvc-3display-templates

ASP.net MVC - Display Template for a collection


I have the following model in MVC:

public class ParentModel
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }

    public IEnumerable<ChildModel> Children { get; set; }
}

When I want to display all of the children for the parent model I can do:

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

I can then create a ChildModel.cshtml display template and the DisplayFor will automatically iterate over the list.

What if I want to create a custom template for IEnumerable?

@model IEnumerable<ChildModel>

<table>
    <tr>
        <th>Property 1</th>
        <th>Property 2</th>
    </tr>
    ...
</table>

How can I create a Display Template that has a model type of IEnumerable<ChildModel> and then call @Html.DisplayFor(m => m.Children) without it complaining about the model type being wrong?


Solution

  • Like this:

    @Html.DisplayFor(m => m.Children, "YourTemplateName")
    

    or like this:

    [UIHint("YourTemplateName")]
    public IEnumerable<ChildModel> Children { get; set; }
    

    where obviously you would have ~/Views/Shared/DisplayTemplates/YourTemplateName.cshtml:

    @model IEnumerable<ChildModel>
    
    <table>
        <tr>
            <th>Property 1</th>
            <th>Property 2</th>
        </tr>
        ...
    </table>