在选择选项中选择所有选定选项后,努力回到模型中。
在视图中:
<select id="GridRegions" multiple name="@Html.NameFor(model => model.GridRegions)">
<option value=""></option>
<option value="Centre">Centre</option>
<option value="Inner">Inner</option>
<option value="Outer">Outer</option>
</select>
在脚本块中:
$("#GridRegions").chosen().change(function (e, params) {
values = $("#GridRegions").chosen().val();
$("#GridRegions").val(values);
console.log("Grid: " + $('#GridRegions').val());
});
控制台正确地写出所选的值,例如中心,内部但只有中心在表单帖子中传回,因为字段需要单个字符串。我已经关注了如何将数组转换为脚本中的字符串的大量示例,但它总是以某种方式出错。
获取values数组的最佳方法是什么,将其转换为逗号分隔的字符串并将其作为GridRegions的值传递给模型?我正在使用Entity Framework 6,因此GridRegions元素是Grading模型的一部分:
[HttpPost]
public ActionResult Form(Grading grading)
{
if (ModelState.IsValid)
{
db.Gradings.Add(grading);
db.SaveChanges();
}
}
答案 0 :(得分:0)
我终于找到了一个解决方法,也许不是最好的解决方案,但至少它对我有用,可能会帮助别人。我最终给选择列表提供了一个替代名称,并将数据传递回模型外部的操作:
ICollection<string> Grids
然后在动作中我将数组转换为字符串并将其分配给模型。
// stringify the multiselect arrays after check for null
if (Grids != null)
{
grading.GridRegions = String.Join(",", Grids);
}
唯一需要注意的是,您无法根据模型中这些字段的数据注释进行验证检查,因为在执行ModelState.IsValid检查时,实际模型字段为NULL,因此需要进行额外的检查在行动中做出。