0

我有一个包含多个选择列表的表单,并且我还使用了 bootstrap selectpicker。

代码

型号

    [Display(Name = "SystemTyp")]
    [Required(ErrorMessage = "Vänligen välj typ")]
    public List<SelectListItem> SystemTypes { get; set; }

观点

    <div class="form-group">
        @Html.Label("SystemTyp", new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.DropDownList("SystemTypes",
           RegistrationHandlers.GetSystemtypes()
           ,
           new { @class = "form-control", @multiple = "multiple", @title = "---  Välj Systemtyp  ---" })
            @Html.ValidationMessageFor(model => model.SystemTypes, "", new { @class = "text-danger" })
        </div>
    </div>

发帖时:

在此处输入图像描述

每次我发布列表都是空的。列表名称与模型属性名称匹配。

我错过了什么?

我有另一个列表是一个单一的选择,所以选择的值是一个简单的字符串,这工作正常,但上面让我头疼。

4

1 回答 1

2

您应该了解DropDownList帮助程序在 html 标记中创建select带有name="SystemTypes"属性的标记。

POST中通过名称传递选定的值UserRole

而且您不需要 POST 上的整个列表,您只需要选择的值,因此SystemTypeId在您的创建属性ViewModel并将您的助手更改为:

 @Html.DropDownList("SystemTypeId", <-- note this
           RegistrationHandlers.GetSystemtypes()
           ,
           new { @class = "form-control", @multiple = "multiple", @title = "---  Välj Systemtyp  ---" })

然后您将在绑定模型中获得选定的值。

不要试图找回全部列表——你不需要它。

如果你需要选择多个,你应该使用ListBoxhelper:

@Html.ListBox("SystemTypeIds", <-- note this
               RegistrationHandlers.GetSystemtypes()
               ,
               new { @class = "form-control", @title = "---  Välj Systemtyp  ---" })

SystemTypeIds属性应该是ArrayIEnumerable<int>IList<int>绑定更正。(当然它可能不仅是int但是stringbool等等。)

如果您正在寻找实现这一目标的最佳方法,我建议您使用强类型助手 - ListBoxFor

@Html.ListBoxFor(x => x.SystemTypeIds
               ,RegistrationHandlers.GetSystemtypes()
               ,new { @class = "form-control", @title = "---  Välj Systemtyp  ---" })
于 2016-09-01T11:43:31.823 回答