提交无效模型后,将控制器中多选的选定值设置为视图

Set The selected Value of a Multiselect from Controller to View after submitting an invalid Model

我正在使用 Multiselect DropDownList 生成多个 <select> 我能够生成它并且工作正常。

但是如果我尝试使用参数提交它:

  1. 姓名=空
  2. ObjAOption = [1,2] // 假设我 select 在我的 multiselect
  3. 中编辑了 2 个选项

ObjAOption 只会 select option value='1' 而不是 select 选项 1 和 2.

有什么方法可以取回 selected 选项并通过在我的控制器中进行设置将其传回我的视图吗?我很乐意使用 HTML 助手,而不是在这部分使用 jQuery 或 javascript。

控制器:

public ActionResult AddObjectA(AddModel am){
      if(ModelState.IsValid){
            //Save
      }
      else {
            am.ObjA = // new List of ObjectA with atleast 4 option
            return View("MyView",am);
      }
}

查看:

@Html.LabelFor(model => model.ObjA, "Object A")
@Html.DropDownList("ObjAOption", new MultiSelectList(Model.ObjA, "Key", "Name"), "-- Select Object A--", new { @class = "custom-select custom-select-sm", multiple="" })
@Html.ValidationMessageFor(m => m.ObjAOption, "", new { @class = "text-danger" })

型号:

public class AddModel {
        [Required]
        public String Name {get;set;}
        public IEnumerable<ObjectA> ObjA{ get; set; }
        [Required(ErrorMessage = "Please select at least one option")]
        public List<int>ObjAOption{ get; set; }
}

public class ObjectA {
        public int Key {get;set;}
        public string Name {get;set;}
}

您尝试过使用助手 Hiddenfor 吗?它生成一个字段,保留您的元素值、名称和属性:

查看:

@Html.LabelFor(model => model.ObjA, "Object A")
@Html.DropDownList("ObjAOption", new MultiSelectList(Model.ObjA, "Key", "Name"), "-- Select Object A--", new { @class = "custom-select custom-select-sm", multiple="" })
@Html.ValidationMessageFor(m => m.ObjAOption, "", new { @class = "text-danger" })
@Html.HiddenFor(m => m.ObjAOption)

解决方案:

我废弃了我的 DropDownList 并尝试使用 ListBoxFor 讨论 here