我尝试使用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;可以找到(你错过了使用 指令或程序集引用?)
我
时也遇到此错误答案 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))