Консолидация входных элементов, содержащих выражения lamba, в ASP.NET MVC Razor View - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть представление ASP.NET MVC, которое содержит много похожего кода, и я пытаюсь выяснить, есть ли способ его консолидировать. Вот пример для Вопроса 1, и я хочу подготовить его для 18 вопросов.

<div class="editor-label">
    @Html.LabelFor(model => model.Question1)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Question1)
    @Html.ValidationMessageFor(model => model.Question1)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.Question1Type)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Question1Type)
    @Html.ValidationMessageFor(model => model.Question1Type)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.Question1Required)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Question1Required)
    @Html.ValidationMessageFor(model => model.Question1Required)
</div>

Есть ли способ перебрать цикл для всех вопросов или какой-то другой механизм в MVC для объединения этого кода для 18 вопросов?

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

Посмотрите на эту статью.Это объясняет, как связать представление из списка.Я полагаю, что с некоторой корректировкой вашей ViewModel это может быть полезно и для вас.

1 голос
/ 23 декабря 2011

Я думаю, что-то вроде этого будет работать:

@{
  var properties = new List<Func<Model, object>> 
                   { 
                       model => model.Question1, 
                       model => model.Question1Type, 
                       model => model.Question1Required
                   };
 }
 @foreach( property in properties ) {
     <div class="editor-label">
        @Html.LabelFor(property )
     </div>
     <div class="editor-field">
        @Html.EditorFor(property )
        @Html.ValidationMessageFor(property )
     </div>
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...