无法使用viewmodel属性绑定mvc中的dropdownlist

时间:2015-02-03 10:20:25

标签: asp.net-mvc asp.net-mvc-4 razor

在我的视图模型中,我有一个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" })

有什么想法吗?感谢

2 个答案:

答案 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);
}