2015-10-29 1 views
1

Я пытаюсь сгенерировать selectList с выбранным по умолчанию элементом в MVC. Я назначаю selectlist в сумку просмотра и пытаюсь отобразить его в своем представлении и продолжаю получать следующую ошибку.Создание SelectList с выбранным по умолчанию элементом в MVC

Кто-нибудь знает, что я могу делать неправильно?

Создать список в моем контроллере:

ViewBag.MasterAccountSelect = new SelectList(masterAccountsList, "MasterAccount", "MasterAccount", userSettingsViewModel.MasterAccountName); 

Отрендерьте SelectList на мой взгляд:

  <div class="editor-label"> 
       @Html.LabelFor(model => model.MasterAccountSelect, "MasterAccountSelect") 
      </div> 
      <div class="editor-field"> 
       @Html.DropDownList("MasterAccountSelect") 
       @Html.ValidationMessageFor(model => model.MasterAccountSelect) 
      </div> 

Я получаю эту ошибку:

Compiler Error Message: CS1061: 'UserSettingsViewModel' does not contain a definition for 'MasterAccountSelect' and no extension method 'MasterAccountSelect' accepting a first argument of type 'UserSettingsViewModel' could be found (are you missing a using directive or an assembly reference?)

ASP error screenshot

Я также получаю эту ошибку, когда я

+0

Вашей потребности, чтобы показать вашу модель 'UserSettingsViewModel' (ясно, что она не содержит свойство с именем' MasterAccountSelect') Но если вы используете модель представления, то вы не должны использовать 'ViewBag 'anyway –

+0

Спасибо за информацию @StephenMuecke. Могу ли я включить SelectList как часть моей модели просмотра? –

+0

Да, и вам нужно. И, похоже, вы хотите привязываться к свойству 'MasterAccountName'? Это верно. –

ответ

0

У вас нет модели с именем MasterAccountSelect, следовательно, ошибка. Из кода вы назначаете ViewBag, вы по всей видимости, желая привязать к свойству в модели с именем MasterAccountName в этом случае ваша модель должна быть

public class UserSettingsViewModel 
{ 
    [Display(Name = "Master Account Name")] 
    [Required(ErrorMessage = "Please select a master account name")] 
    public string MasterAccountName { get; set; } 
    public SelectList MasterAccountNameList { get; set; } 
    .... 
} 

Затем в методе GET

UserSettingsViewModel model = new UserSettingsViewModel 
{ 
    MasterAccountName = ..... , 
    MasterAccountNameList = new SelectList(masterAccountsList, "MasterAccount", "MasterAccount") 
} 
return View(model); 

и по мнению

<div class="editor-label"> 
    @Html.LabelFor(m => m.MasterAccountName) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(m => m.MasterAccountName, Model.MasterAccountNameList, "-Please select-") 
    @Html.ValidationMessageFor(m => m.MasterAccountName) 
</div> 

Side примечание: Поскольку вы желающих варианты value и отображения текста, чтобы быть таким же (используя свойство MasterAccount), вы также можете использовать

MasterAccountNameList = new SelectList(masterAccountsList.Select(x => x.MasterAccount)) 
0

попробовать Label вместо LabelFor, Вы не можете использовать LabelFor строго типа HTML помощник, если вы не имеете свойство в модели.

<div class="editor-label"> 
    @Html.Label("MasterAccountSelect") 
</div> 
<div class="editor-field"> 
    @Html.DropDownList("MasterAccountSelect") 
    @Html.ValidationMessageFor(model => model.MasterAccountSelect) 
</div> 

Один хороший Предложение Всякий раз, когда вы используете Viewbag для заполнения раскрывающегося списка, Держите Viewbag и имя свойства отличается тем, что он не будет автоматически выбрать выбранное значение.

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