在我的视图模型中,我有一个getter属性,如下所示。
[Display(Name = "Users System:")]
public string UsersSystem { get; set; }
public IEnumerable<SelectListItem> SystemsList
{
get
{
List<SelectListItem> lst = new List<SelectListItem>();
string[] UsersSystem = ConfigurationManager.AppSettings["UsersSystem"].ToString().Split(new char[] { ',' });
foreach (var item in UsersSystem)
{
lst.Add(new SelectListItem { Text = item, Value = item });
}
return lst;
}
}
我需要将值绑定到下拉列表,但我得到Object reference not set to an instance of an object
。我的观点有以下标记
@model GazetteerAddressRequest.Lib.Model.ChangeRequestModel
@Html.DropDownListFor(model => model.UsersSystem, Model.SystemsList , new { @class = "form-control" })
有什么想法吗?感谢
答案 0 :(得分:1)
正如Stephen所提到的,你不能对model属性和SelectList使用相同的名称。在ChangeRequestModel
中添加新属性以保留下拉列表中所选项目的值。
public string UserSystemSelected { get; set; }
在您的视图中
@Html.DropDownListFor(model => model.UserSystemSelected, Model.UsersSystem, new { @class = "form-control" })
在这里,您使用Model.UsersSystem
填充下拉列表,其中包含所有SelectListItem
的列表,并且下拉列表中的VALUE SELECTded绑定到UserSystemSelected
。
编辑:
你也可以试试这个:
在您的控制器中,在Action方法
中ViewBag.SystemList = new SelectList(
ConfigurationManager.AppSettings["UsersSystem"].ToString()
.Split(',')
.Select(x => new KeyValuePair<string, string>(x, x)),"Key", "Value");
在你的视图中
Html.DropDownListFor(m => m.UserSystemSelected, (SelectList)ViewBag.SystemList)
答案 1 :(得分:0)
您必须将模型传递到视图中,否则模型将在视图中为null。
EG。首先,您可以将 SelectListItem 列表传递到 ChangeRequestModel ,然后将其传递到视图中。
public ActionResult YourPage(){
return View(changeRequestModel);
}