加载局部视图后,未选择下拉列表值

时间:2017-09-07 12:27:56

标签: jquery ajax asp.net-mvc

我在父视图中有两个部分视图。在父视图中有一个“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”)。

感谢接受任何帮助。 帕塔

1 个答案:

答案 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>表,那么您需要更新选项,那么您的第一个调用应该是GeneralsIID返回Value然后,您可以创建新的JsonResult元素并将其附加到现有<option>