2017-09-07 50 views
0

我在父視圖中有兩個部分視圖。在父視圖中有一個「div」標記,它包含稱爲「狀態」的部分視圖。加載部分視圖後未選擇下拉值

<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」)。

任何幫助將感激地接受。 Partha

+1

你用'id =「btnSave」'元素是什麼? –

+0

「btnSave」實際上是部分視圖中的保存按鈕,它包含幾個字段。這些值將被保存在數據庫中並且也被存儲在DDL中(也在部分視圖中,即'狀態'中)。保存的值通過json從控制器返回。值是通過已經給出的JavaScript捕獲的。 – Partha

+0

類型是「按鈕」。 – Partha

回答

0

Ajax調用是異步的,並且您的$("div#divState select").val("5");代碼行在​​函數完成之前執行。

您需要在成功回調

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"); 
    }); 
}, 

設置<select>的價值,但其目前還不清楚爲什麼你做一個AJAX調用再次更換<select>。如果第一個阿賈克斯呼叫將數據保存到您的Generals表中,因此您需要更新選項,那麼您的第一個呼叫應該返回JsonResult中的IIDValue,然後您可以創建並追加一個新的<option>元素到現有的<select>

+0

我使用的是局部視圖而不是ajax表單。父表格將在稍後保存。我不使用ajax表單。如何在部分視圖中調用成功回調。我正在重新加載部分視圖,因爲有一個order by子句來維護序列。 – Partha

+0

誰說你在使用ajax表單?而且你可以用JavaScript來訂購它。你甚至嘗試了我給你的正確的代碼嗎? - 你只需用我的答案 –

+0

中的代碼替換現有的'success:function(response){...}'中的代碼即可。非常感謝。 – Partha