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

what would I use in this situation(asp.net mvc 3 display templates)


I have something like this

public class ViewModel1
{
   // some properties here
   public List<ViewModel2> ViewModel2 {get; set;}
}

public class ViewModel2
{
   public string A {get; set;}
   public string B {get; set;}
}

// view

<table>
  <thead>
     <tr> a </tr>
     <tr> b </tr>
  </thead>
   <tbody>
      // want to use a display template to render table row and cells so I don't need to use for loop 
   </tbody>
</table>

I tried to use "@Html.DisplayForModel()" but that I seems to take the viewModel of the view(so in my case ViewModel1)

I need to make it take ViewModel2 but I don't see any option to pass in ViewModel2(a model object).

I then tried

 @Html.DisplayFor(x => x.ViewModel2)

That did not work to well it just printed out like the first properties value and never even made any cells.

Here is basically my display template

@model ViewModel2

  <tr>
        <td>@Model.A</td>
        <td>@Model.B</td>
 </tr>   

So how can I make this work?


Solution

  • Try like this:

    <table>
        <thead>
            <tr>
                <th>a</th>
                <th>b</th>
            </tr>
        </thead>
        <tbody>
            @Html.DisplayFor(x => x.ViewModel2)
        </tbody>
    </table>
    

    and then inside ~/Views/Shared/DisplayTemplates/ViewModel2.cshtml:

    @model ViewModel2
    <tr>
        <td>@Model.A</td>
        <td>@Model.B</td>
    </tr> 
    

    Notice the name and location of the display template. It is important to respect this convention if you want this to work.