что бы я использовал в этой ситуации (шаблоны отображения asp.net mvc 3) - PullRequest
0 голосов
/ 03 апреля 2011

У меня что-то вроде этого

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>

Я пытался использовать "@Html.DisplayForModel()", но мне кажется, что я использую viewModel для представления (так в моем случае ViewModel1)

Мне нужно, чтобы он взял ViewModel2, но я не вижу никакой опции для передачи в ViewModel2 (объект модели).

Затем я попытался

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

Это не сработалопросто распечатал как первое значение свойства и даже не создал ни одной ячейки.

Вот мой шаблон отображения

@model ViewModel2

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

Так как я могу заставить эту работу работать?

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Попробуй так:

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

, а затем внутри ~/Views/Shared/DisplayTemplates/ViewModel2.cshtml:

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

Обратите внимание на имя и расположение шаблона отображения. Важно соблюдать это соглашение, если вы хотите, чтобы это работало.

0 голосов
/ 03 апреля 2011

Если вы ДЕЙСТВИТЕЛЬНО не хотите указывать foreach в своем «основном» шаблоне, вы можете пометить свою собственность с помощью UIHint

public class ViewModel1
{
   // some properties here
   [UIHint("ListOfViewModel2")]
   public List<ViewModel2> ViewModel2 {get; set;}
}

Затем в DisplayTemplates \ ListOfViewModel2.ascx вы помещаете свой foreach

@model IList<ViewModel2>

foreach( var m in Model )
{
    <tr>@Html.DisplayFor(x => m)</tr>
}

Не меняйте свою DisplayModel на ViewModel2, и, по вашему мнению, вы можете позвонить

@Html.DisplayFor(x => x.ViewModel2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...