我的代码如下:
查看
@Html.LabelFor(m => m.Employee.ManagerId)
@Html.DropDownListFor(m => m.Employee.ManagerId, Model.Employee.ManagerList, new { @placeholder = "Select a Manager...", @disabled = "true" })
@Html.ValidationMessageFor(m => m.Employee.ManagerId)
查看(Jquery代码)
此函数调用控制器以获取将在ManagerList中填充的列表。
function RefreshManagers(engineerSelected) {
if (engineerSelected != "") {
$.ajax({
url: '@Url.Action("ReloadManagersByEmployee", "Locator")',
type: 'POST',
data: { employeeId: engineerSelected },
success: function (data) {
$("#Employee_ManagerId").empty();
$.each(data.managers, function (index, optiondata) {
$(document.createElement('option'))
.attr('value', optiondata.Value)
.text(optiondata.Text)
.appendTo($("#Employee_ManagerId"));
});
$("#Employee_ManagerId").combobox("refresh");
},
error: function (xhr) { alert("Unable to reload managers"); }
});
}
else {
$("#Employee_ManagerId").empty();
$("#Employee_ManagerId").append("<option value=''>Select a Manager...</option>");
}
$("#Employee_ManagerId").combobox("refresh");
}
控制器: 控制器返回以下内容:
public JsonResult ReloadManagersByEmployee(string employeeId)
{
//Do the stuff...call the corresponding service and get the list, then:
return Json(new
{
managers = managerList
});
}
注意:创建列表'managerList'时,我已经预先选择了要显示的值。
问题:
当JQuery创建组合框时,未正确设置所选管理器(在创建列表时先前选择)。
我在将列表返回到视图之前检查了列表,并且已正确设置。
问题:
一旦 RefreshManagers()函数加载管理器列表,我该怎么做才能将该列表的选定值更改为已在控制器中选择的值?
问题2:
通过应用@Stephen Muecke告诉的更改来正确刷新管理器列表,但是当将模型传递给控制器时,未传递选定的管理员ID(始终为null)
@Html.DropDownListFor(m => m.Employee.ManagerId, Model.Employee.ManagerList, new { @placeholder = "Select a Manager..." })
为什么此属性未正确传递?
答案
它没有传递该值,因为在DropDownListFor中设置了属性@disabled = true,只需将其设置为false。