我有两个组合框:一个用于客户,一个用于项目。The idea is that when the Client is selected, the Projects combo is then populated. 在我的 MVC 代码中,组合看起来像:
@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"})
客户组合的 ID 为SelectedClientID
,项目组合的 ID 为SelectedProjectID
。
我的问题是我的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
这段代码主要取自这个例子。当我调试时,我从客户端组合中选择一个客户端。这会触发该.change
功能。GetProjects
Action 被正确调用并返回其 JSON 。但随后 javascript 就停止了。之后它永远不会进入代码,它会跳过所有的成功函数,function(projects)
.
什么可能导致这种情况发生?
我也尝试用这样的同步调用替换我的$.getJSON
线路:
$.ajax({ datatype: "json", url: "GetProjects", data: { ClientID: selectedClientID}, async: false }).done(function (projects) {
但结果相同,成功代码仍然被跳过。