2012-01-17 3 views
0

У меня есть модель, в которой есть коллекция пользователей. Я просматриваю эту коллекцию, чтобы создать таблицу пользователей. Одним из вариантов в таблице является изменение роли пользователя, которая является свойством enum объекта пользователя. В настоящее время у меня есть следующий код:Установить выбранное значение для вложенной формы в ASP.NET MVC3

@foreach (var user in Model.Users) 
{ 
    <tr> 
     ... 
     <td> 
      <form action="@Url.Action("UpdateRole", "Admin", new { id = user.Id })" class="inline"> 
       @Html.DropDownList("Role", Model.GetRoles()) 
      </form>      
     </td> 
     ... 
    </tr> 
} 

Проблема с этим кодом является то, что сгенерированный выпадающий список не знает о фактической стоимости имущества на объекте пользователя. Однако я не вижу перегрузки для метода DropDownList, который принимает значение, используемое для выбранного значения. Метод DropDownListFor делает, но он, похоже, работает непосредственно с моделью, и я не могу определить способ передать ему тип вложенного пользовательского объекта. Это можно сделать?

ответ

1

Вы можете использовать SelectList [1], который имеет переопределение для выбранного значения, например .:

@Html.DropDownList("Role", new SelectList(Model.GetRoles(), "selectedValueHere")) 
+0

+1, который должен это сделать. – smartcaveman

+0

Именно это я и искал. Благодаря! – Chris

0

Вы можете создать собственный метод расширения DropDownList HtmlHelper, который включает в себя необходимые вам параметры.

+0

Создание надлежащего HTML помощника для чего-то, как это нетривиальная, и я надеюсь, чтобы избежать этого. В худшем случае я перемещаю все содержимое цикла foreach на частичный вид и делаю его таким образом. Я надеялся на простой способ подправить правильное значение в существующий вспомогательный метод, прежде чем я это сделаю. – Chris

+0

На самом деле это довольно тривиально, если вы используете Reflector и смотрите 'System.Web.Mvc.Html.SelectExtensions'. Другое решение (хотя и немного взломанное) должно было бы создать метод расширения, который связывает на стороне клиента с jQuery, и вызвать это сразу после объявления выпадающего списка – smartcaveman

Смежные вопросы