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?
Try like this:
and then inside
~/Views/Shared/DisplayTemplates/ViewModel2.cshtml
:Notice the name and location of the display template. It is important to respect this convention if you want this to work.
If you REALLY don't want the foreach in your "main" template, you can tag your property with UIHint
Then, in DisplayTemplates\ListOfViewModel2.ascx, you put your foreach
Dont change your DisplayModel for ViewModel2, and in you view, you can call