2013-08-20 50 views
0

我有兩個組合框:一個用於客戶端,另一個用於項目。這個想法是,當選擇客戶端時,項目組合將被填充。在我的MVC編碼,連擊簡單的樣子:級聯組合JSON請求不觸發成功功能

@Html.DropDownListFor(Function(model) model.ClientID, New SelectList(Model.Clients, "ClientID", "Name"), New With {.id = "SelectedClientID"}) 
@Html.DropDownListFor(Function(model) model.ProjectID, Enumerable.Empty(Of SelectListItem), New With {.id = "SelectedProjectID"}) 

當客戶組合有SelectedClientID的ID和項目組合有SelectedProjectID的ID。

我的問題是我的javascript,當選擇一個客戶端時,在我的控制器中觸發一個動作。

<script type="text/javascript"> 
    $(function() { 
     $('#SelectedClientID').change(function() { 
      var selectedClientID = $(this).val(); 
      $.getJSON('@Url.Action("GetProjects")', { ClientID: selectedClientID }, function (projects) { 
       var projectsSelect = $('#SelectedProjectId'); 
       projectsSelect.empty(); 
       $.each(projects, function (index, project) { 
        projectsSelect.append(
         $('<option/>') 
          .attr('value', project.ProjectID) 
          .text(project.Name) 
        ); 
       }); 
      }); 
     }); 
    }); 
</script> 


Function GetProjects(ClientID As Integer) As ActionResult 
    Return Json(db.ppProjects.Where(Function(c) c.ClientID = ClientID), JsonRequestBehavior.AllowGet) 
End Function 

此代碼大多取自this example。當我調試時,我從客戶端組合中選擇一個客戶端。這觸發了.change函數。 GetProjects Action被正確調用並返回其JSON。但是,JavaScript只是停止。它之後永遠不會執行代碼,它會跳過所有成功函數function(projects)

什麼可能導致這種情況發生?

我也試圖與同步呼叫更換我$.getJSON行,像這樣:

$.ajax({ datatype: "json", url: "GetProjects", data: { ClientID: selectedClientID}, async: false }).done(function (projects) { 

但具有相同的結果,成功的代碼不會被跳過依然。

+0

附加'.fail()'/'error()'回調並檢查錯誤。 – Johan

回答

0

您的代碼看起來正確。嘗試使用done()代替成功回調:

$.getJSON('@Url.Action("GetProjects")', { ClientID: selectedClientID }) 
     .done(function (projects) { 
       var projectsSelect = $('#SelectedProjectId'); 
       projectsSelect.empty(); 
       $.each(projects, function (index, project) { 
        projectsSelect.append(
         $('<option/>') 
          .attr('value', project.ProjectID) 
          .text(project.Name) 
        ); 
       }); 
      }); 
+0

這將如何幫助?最終結果將是相同的。 – Johan

+0

雅,沒有運氣,仍然跳過一切。 – ElliotSchmelliot