我有兩個組合框:一個用於客戶端,另一個用於項目。這個想法是,當選擇客戶端時,項目組合將被填充。在我的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) {
但具有相同的結果,成功的代碼不會被跳過依然。
附加'.fail()'/'error()'回調並檢查錯誤。 – Johan