2014-12-04 6 views
0

я следующий код: метод контроллера:Как установить значение по умолчанию для Html.DropDownListFor в MVC

public ActionResult Register(int? registrationTypeId) 
     { 
      IEnumerable<AccountType> accountTypes = new List<AccountType> 
      { 
       new AccountType 
       { 
        AccountTypeId = 1, 
        AccountTypeName = "Red" 
       }, 
       new AccountType 
       { 
        AccountTypeId = 2, 
        AccountTypeName = "Blue" 
       } 
      }; 
      // I want to select account type on registrationTypeId 
      ViewBag.AccountTypes = accountTypes; 
      return View(); 
     } 

Посмотреть

<div class="col-md-10"> 
      @Html.DropDownListFor(n => n.AccountType, 
     new SelectList(ViewBag.AccountTypes, "AccountTypeId", "AccountTypeName"), new { @class = "form-control" }) 
</div> 

Модель

public class RegisterViewModel 
    { 
     [Required] 
     [Display(Name = "Account Type")] 
     public int AccountType { get; set; 
    } 

Как вы можете видеть registrationTypeId в контроллере, я хочу установить тип на его основаниях, если это не null, в противном случае установлено значение красного цвета. Я пробовал много, но ничего не работало для меня. Любая помощь будет оценена!

+0

Как выглядит ваша модель? – CodeCaster

+0

Возможный дубликат [Как я могу заставить этот ASP.NET MVC SelectList работать?] (Http://stackoverflow.com/questions/781987/how-can-i-get-this-asp-net-mvc-selectlist- для работы) – CodeCaster

+0

set AccountType для установки по умолчанию –

ответ

1

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

public List<SelectListItem> AccountTypes { get; set; } 

в контроллере в методе GET установить по умолчанию и установить ваш список

Model.AccountType = 1; // change the one to your default value 
Model.AccountTypes = accountTypes; //instead of ViewBag.AccountTypes = accountTypes; 

затем на ваш взгляд

@Html.DropDownListFor(x => x.AccountType, Model.AccountTypes) 

установки ВидСчета перед передачей модели на представление будет установлено значение по умолчанию, и выбранное значение в представлении будет возвращено в том же значении.

+0

Почему списки, переданные в представление в ViewBag в примерах и в проекте «из коробки»? –

+0

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

+0

Примеры от Microsoft известны тем, что они не очень надежны для промышленности и часто показывают «худшие практики», к сожалению ... потому что они пытаются рекламировать идею «легко кодировать», поэтому они хотят, чтобы она выглядела как можно проще на их Веб-сайт – nothingisnecessary

0

Неправильный способ сделать это

var accountTypes = new SelectList(accountTypes, "AccountTypeId", "AccountTypeName"); 

foreach(var item in accountList) 
    if (item.AccountTypeId == registrationTypeId) 
     item.Selected = true; 

ViewBag.AccountTypes = accountTypes; 

Учитывая,

@Html.DropDownListFor(n => n.AccountType, (SelectList)ViewBag.AccountTypes) 
+0

Вы не должны (и не должны) делать это. Установка свойства 'item.Selected' игнорируется' @ Html.DropDownListFor() ', поэтому его бессмысленно. Если значение 'AccountType' соответствует значению одного из параметров, то этот параметр будет выбран. –

+0

Не осознавал, никогда не делал этого так раньше. –

+0

Я оставлю это, ваше объяснение может помочь людям. –

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