我在父视图中有两个部分视图。在父视图中有一个“div”标记,它包含一个名为“state”的部分视图。
<div id="divState"></div></td>
部分视图中只有一个DDL:
@Html.DropDownList("State", null, "---------- Select ----------", htmlAttributes: new { @class = "form-control" })
部分视图加载如下:
$('#divState').load('@Url.Action("LoadState", "General")');
控制器代码如下所示:
[HttpGet]
public ActionResult LoadState()
{
if (Request.IsAjaxRequest())
{
ViewBag.State = new SelectList(db.Generals, "IID", "Value");
return PartialView("_State");
}
else
{
return null;
}
}
我有一个链接按钮,它打开一个模态对话框,实际上是一个局部视图。局部视图包含几个字段和一个用于保存数据的按钮。保存后,该值将显示在状态DDL中,并带有最后输入的值。我编写了以下jQuery来存储并选择最后插入的值。
<script type="text/javascript">
$(function () {
$("#btnSave").click(function () {
debugger;
$.ajax({
type: "POST",
url: '@Url.Action("SaveGeneralData", "General")',
data: '{name:"' + $("#Value").val() + '", description:"' + $("#Description").val() + '"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
//alert("Id :" + response.IID);
var id = response.IID;
$('#divState').load('@Url.Action("LoadState", "General")');// Loading the partial view from controller
// to get the newly inserted value
$('#dialogState').dialog('close');
//$('div#divState select').val("5").attr("selected", "selected");
$("div#divState select").val("5");
},
failure: function (response) {
alert(response.responseText);
//alert("1");
},
error: function (response) {
alert(response.responseText);
}
});
});
});
</script>
当我重新加载包含DDL的局部视图时,在DDL中显示插入值。 但我的问题是没有选择最后插入的值。 DDL在闪烁最后一个插入记录后显示第一个列表项(即它被硬编码为“5”)。
感谢接受任何帮助。 帕塔
答案 0 :(得分:0)
Ajax调用是异步的,您的// load webcomponents polyfills
(function() {
if ('registerElement' in document
&& 'import' in document.createElement('link')
&& 'content' in document.createElement('template')) {
// browser has web components
}
else {
// polyfill web components
let e = document.createElement('script');
e.src = '/bower_components/webcomponentsjs/webcomponents-lite.js';
document.head.appendChild(e);
}
// Promise polyfill for IE11, as of 2017/09/07 webcomponents Promise polyfill is broken
// (https://github.com/webcomponents/webcomponentsjs/issues/837)
if (!window['Promise'] || !window['Promise']['reject']){
// Remove the webcomponents polyfilled Promise object
delete window.Promise;
// Add own polyfill for Promise
let e = document.createElement('script');
e.src = '/lib/promisePolyfill/promise.js'; // or polyfill.io
document.head.appendChild(e);
}
})();
代码行在$("div#divState select").val("5");
函数完成之前执行。
您需要在成功回调
中设置.load()
的值
<select>
但是,不清楚为什么你要进行ajax调用再次替换success: function (response) {
...
$('#divState').load('@Url.Action("LoadState", "General")', function() {
// set value in the callback (after the DOM has been updated)
$("div#divState select").val("5");
});
},
。如果第一个ajax调用是将数据保存到<select>
表,那么您需要更新选项,那么您的第一个调用应该是Generals
和IID
返回Value
然后,您可以创建新的JsonResult
元素并将其附加到现有<option>