Как я могу использовать Html.DropDownListFor без лямбда-выражения? - PullRequest
0 голосов
/ 01 января 2012

У меня работает следующий код:

@for (var index = 0; index < Model.AdminSummaries.Count(); index++) {

   <div class="rep_td0" id="rk_@(index)">
      @Model.AdminSummaries[index].RowKey
   </div>
   <div class="rep_td0"> 
   @Html.DropDownListFor(
      x => x.AdminSummaries[index].Status, 
      new SelectList(
            AdminStatusReference.GetAdminStatusOptions(),
            "Value",
            "Text",
      ), 
      new { id = string.Format("Status_{0}", index) }
   )

Я перебираю Model.AdminSummaries, который имеет тип

public IList<AdminSummary> AdminSummaries { get; set; }

Поскольку это IList, я могу использовать индексированиеи x => x.AdminSummaries [index] .Status работает, чтобы получить правильный статус для каждой строки, а также есть номер индекса, который я могу использовать для изменения идентификатора элементов для каждой строки.

Теперь у меня естьпроблема.Я хочу применить тот же метод кода к следующему, который является классом в моей модели с аналогичными полями для AdminSummaries (включая поле Status):

public ICollection<Item> Items { get; set; }

Поскольку это ICollection, я думаю, что не могу получить доступ к элементамиспользуя [index]

Я могу использовать foreach, но КАК я могу указать значение состояния для первого параметра DropDownListFor?Также, как я могу получить значение индекса, чтобы я мог индексировать поля в строках.

Обновление

Точка индекса была чем-то, что я добавил к исходному вопросу.Важно, что решение может сделать что-то вроде следующего, чтобы я мог позже использовать jQuery для полей формы.

id="rk_@(index)"

1 Ответ

2 голосов
/ 01 января 2012

Вы можете использовать шаблон редактора. Таким образом, вы замените это для цикла следующим:

@Html.EditorFor(x => x.Items)

и затем вы определяете шаблон редактора, который будет автоматически отображаться для каждого элемента коллекции (~/Views/Shared/EditorTemplates/Item.cshtml):

@model Item
<div class="rep_td0"> 
    @Html.DropDownListFor(
        x => x.SomePropertyOfItemToBindTo, 
        new SelectList(
            AdminStatusReference.GetAdminStatusOptions(),
            "Value",
            "Text",
            Model.SomePropertyOfItemToBindTo
        )
    )
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...