无法使用 viewmodel 在 mvc 中绑定下拉列表 属性

unable to bind dropdownlist in mvc using viewmodel property

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

有什么想法吗?谢谢

正如 Stephen 所提到的,您不能对模型 属性 和 SelectList 使用相同的名称。在 ChangeRequestModel 中添加一个新的 属性 以保存下拉列表中所选项目的值。

public string UserSystemSelected { get; set; }

在您看来

@Html.DropDownListFor(model => model.UserSystemSelected, Model.UsersSystem, new { @class = "form-control" })

在这里,您使用 Model.UsersSystem 填充下拉列表,其中包含所有 SelectListItem 的列表,并且从下拉列表中选择的值绑定到 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)

您必须将模型传递到视图中,否则模型将在视图中为空。

例如。首先,您可以将 SelectListItem 列表传递给 ChangeRequestModel,然后将其传递给视图。

public ActionResult YourPage(){
    return View(changeRequestModel);
}