使用MVC中的默认选定项生成SelectList

时间:2015-10-29 02:56:00

标签: html asp.net-mvc

我尝试使用MVC中的默认选定项生成一个selectList。我将一个选择列表分配给viewbag并尝试在我的视图中呈现它并继续得到以下错误。

有谁知道我可能做错了什么?

在我的控制器中创建列表:

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> 

我收到此错误:

  

编译器错误消息:CS1061:&#39; UserSettingsViewModel&#39;才不是   包含&#39; MasterAccountSelect&#39;的定义没有扩展方法   &#39; MasterAccountSelect&#39;接受第一个类型的参数   &#39; UserSettingsViewModel&#39;可以找到(你错过了使用   指令或程序集引用?)

ASP error screenshot

时也遇到此错误

2 个答案:

答案 0 :(得分: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和属性名称不同,因为它不会自动选择您选择的值。

答案 1 :(得分: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> 

附注:由于您希望选项value和显示文字相同(使用属性MasterAccount),您还可以使用

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