提交无效模型后,将控制器中多选的选定值设置为视图
Set The selected Value of a Multiselect from Controller to View after submitting an invalid Model
我正在使用 Multiselect DropDownList 生成多个 <select>
我能够生成它并且工作正常。
但是如果我尝试使用参数提交它:
- 姓名=空
- ObjAOption = [1,2] // 假设我 select 在我的 multiselect
中编辑了 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
我正在使用 Multiselect DropDownList 生成多个 <select>
我能够生成它并且工作正常。
但是如果我尝试使用参数提交它:
- 姓名=空
- ObjAOption = [1,2] // 假设我 select 在我的 multiselect 中编辑了 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