当我进行 MVC 编辑时,如何正确地使我的下拉列表具有来自模型的正确信息?我的编辑使用由 jquery $.ajax 调用填充的动态下拉列表。
这是我的观点的下拉列表...
@Html.DropDownListFor(m => m.SubdivisionID, new SelectList(new List<SelectListItem>(),
"SubdivisionID", "SubdivisionName", Model.SubdivisionID))
我进行了 $.ajax 调用,并且在 $.ajax 调用运行后下拉列表中填充了所有选项,但下拉列表仅选择列表中的第一个选项。如何获取下拉列表以更新模型信息?
例如,下拉列表可以选择 Item1 或 Item2。该模型将“Item2”保存为 SubdivisionID,但是,在 $.ajax 调用之后,下拉列表中有“Item1”,因为 Item1 是列表中的第一项。
我应该怎么做才能使下拉菜单在编辑中选择正确的项目?
这是我的 $.ajax 调用的 JavaScript ......
function getSubdivisions() {
custId = $('#CustomerID').val();
// remove all of the current options from the list
$('#SubdivisionID').empty();
// send request for list of subdivisions
var jqxhr = $.ajax({
url: '/Schedule/getSubdivisions',
type: 'POST',
data: '{ customerId: ' + custId.toString() + ' }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
cache: false,
async: true
});
// received list of models...
jqxhr.done(function (data) {
if (data == null) return;
try {
var ddl = $('#SubdivisionID');
// add each item to DDL
$.each(data, function (index, value) {
ddl.append($('<option></option>', { value: data[index].SubdivisionID }).html(data[index].SubdivisionName))
});
}
catch (ex) {
alert("Done, but with errors!\n" + ex.message);
}
});
// failed to retrieve data
jqxhr.error(function (result, errorText, thrownError) {
alert("Error! Failed to retrieve models! " + errorText + "\n" + thrownError);
});
}
更新 1:我更改了 DropDown Razor 代码,但仍然无法正常工作(见上文)。MVC 永远不会选择正确的列表项。我宁愿让 MVC 处理项目选择,而不是我必须从 JavaScript 中选择所选项目。我的 JavaScript 在一个单独的文件中,目前我没有传递任何参数。
更新 2:我将以下 JavaScript 添加到我的视图中,并更新了我的 JavaScript 以包含马特的答案。
<script type="text/javascript">
var js_doEdit = true;
var subdivisionId = @Model.SubdivisionID
</script>