MVC MultiSelectList绑定

时间:2014-10-20 14:15:18

标签: asp.net-mvc validation razor

我使用ASP.NET MVC ..当我发布我的表单时,它会在我的模型验证时引发强制转换错误。如何修复我的视图模型或其他验证方式?

“从'System.String'类型到'System.Web.Mvc.SelectListItem'类型的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换。” 谢谢..

//my view model
public class ProdGroupViewModel
{
    //I've to fixed here or another way?
    public IEnumerable<SelectListItem> Rooms { get; set; }
}


//controller
public ActionResult Create(int id)
{
    return View(new ProdGroupViewModel
            {
                Rooms = new MultiSelectList(_roomService.GetAll(), "RoomId", "RoomName"),
            });

}

//in my view
<div class="form-group">
    <label class="col-md-3 control-label">Oda</label>
    <div class="col-md-9">
        @Html.ListBoxFor(model => model.Rooms, (MultiSelectList)Model.Rooms, new { @class = "form-control" })
    </div>
</div>

1 个答案:

答案 0 :(得分:2)

您尝试发布到包含您的选择列表的同一媒体资源。列表框中选择的发布结果将是所选选项值的逗号分隔字符串,模型绑定器将无法绑定到MultiSelectList类型的属性。

您需要一个额外的模型属性来保存已发布的值,如:

public List<int> SelectedRoomIds { get; set; }

然后在你看来:

@Html.ListBoxFor(m => m.SelectedRoomIds, Model.Rooms, new { @class = "form-control" })

此外,您不需要投射Model.Rooms,因为它已经是强类型的。