【发布时间】:2014-09-10 03:17:17
【问题描述】:
我已将此 DropDownListFor 添加到我的(部分)视图 _CreateUser.cshtml 中:
<div class="modal fade bs-example-modal-lg" id="createUserModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Create A User</h4>
</div>
@using (Html.BeginForm("Create", "Users", FormMethod.Post))
{
<div class="modal-body">
@Html.LabelFor(model => model.Departments)
<div>
@Html.DropDownListFor(
model => model.SelectedDepartmentIds,
new SelectList(Model.DepartmentSelectList, "Value", "Text"),
new {@class = "multiselect departments", multiple = "multiple"})
</div>
...
以上部分视图在主视图Index.cshtml中声明,并在单击“创建”按钮时显示为模式弹出窗口
@Html.ActionLink("Create user", "Create", "Users", new { @class = "btn btn-primary", @href = "#createUserModal", @data_toggle="modal" })
...
@Html.Partial("_CreateUser", new UserViewModel()
{ //Populating SelectList required for loading dropdownlist
DepartmentSelectList = modelFactory != null ?
modelFactory.Departments.Select(dept => new SelectListItem{Value = dept.Id.ToString(),Text = dept.Name}).ToList()
: null
})
UserViewModel.cs
public IEnumerable<String> Departments { get; set; }
//Used purely for binding DropDownList
public IEnumerable<SelectListItem> DepartmentSelectList { get; set; }
public string SelectedDepartmentIds { get; set; }
//Ideally, I want to populate selected items in this list
public IEnumerable<DepartmentModel> DepartmentModels { get; set; }
UserController.cs
[HttpPost]
public ActionResult Create(UserViewModel postedModel)
{
if (ModelState.IsValid)
{
//Incorrect - returns only first selected Id
string selectedIds = postedModel.SelectedDepartmentIds;
//Correct - returns correct selected Ids
string selectedIds1 = ModelState["SelectedDepartmentId"].Value.AttemptedValue;
...
...
两个问题:
如何从作为模型属性“SelectedDepartmentId”的一部分的 DropDownList 中检索所有选定的项目?我是否需要在运行时使用 jQuery 来更新 ModalProperty?
我可以设置我的视图以便将 Modal 属性“DepartmentModels”与 DropDownList 绑定 - 这将帮助我检索所选项目的完整对象吗?
目前,如果我尝试这样做,我会收到此错误:
{"从类型 'System.String' 到类型 '...DepartmentModel' 的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换。"}
谢谢!
【问题讨论】:
-
“如何从 DropDownList 中检索所有选定的项目”。您正在使用
DropDownListFor,它只允许选择一项。您要选择多个项目吗?<select>control 只回发单个值,而不是复杂对象的所有属性。 -
我使用 jQuery 来允许多选为:$('.multiselect').multiselect();
-
在这种情况下,属性
SelectedDepartmentIds可能应该是string[](我不熟悉您使用的插件,但<select multiple>通常返回一个值数组)
标签: asp.net-mvc-4