我有一个asp.net mvc网站,我想在更改下拉列表时调用服务器。我的代码命中服务器控制器操作,但我从来没有得到回调。我在这里失踪了吗?
这是我的控制器动作:
public ActionResult LoadTeamsandApplications(int id)
{
WorkstreamRoadmapViewModel vm = new WorkstreamRoadmapViewModel();
vm.Applications = GetAppList(id, 0);
vm.Teams = GetTeamList(id, 0);
JsonResult result = Json(vm);
return result;
}
注意: GetAppList ()和 GetTeamList ()都返回
List<SelectListItem>
这是我的jquery代码:
$("#filter").change(function(e) {
var filter= $("#filter").val();
var loadURL = "/List/LoadTeamsandApplications/" + filter;
$.post(loadURL , function(data) {
var items = "<option selected></option>";
$.each(data.Teams, function(i, item) {
items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});
$("#teamFilter").html(items);
var items1 = "<option selected></option>";
$.each(data.Applications, function(i, items1) {
items1 += "<option value='" + item1.Value + "'>" + item1.Text + "</option>";
});
$("#applicationFilter").html(items);
}, "json");
});
我添加了这段代码:
$(document).ajaxError(function(e, xhr, settings, exception) {
alert('error in: ' + settings.url + ' \\n' + 'error:\\n' + exception);
});
但我得到的只是“错误未定义”
答案 0 :(得分:1)
有关此问题的几点建议。
确保您的服务器方法返回您期望的数据。您可以轻松编写单元测试,以确保返回包含预期数据的JsonResult
。如果做不到这一点,只需调试项目并在return Json(vm);
上设置一个断点,以确保方法实际返回。
只是为了调试,尝试通过允许GET简单地转到网址 - 更改return Json(vm);
以返回Json(vm, JsonBehaviour.AllowGet);
并查看会发生什么。
如果以上内容都很好,请通过JavaScript开始粘贴console.log
语句,以确保没有拼写错误等。例如:
var items = "<option selected></option>";
console.log(data.Teams);
$.each(data.Teams, function(i, item) {
items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});
$("#teamFilter").html(items);
var items1 = "<option selected></option>";
console.log(data.Applications);
$.each(data.Applications, function(i, items1) {
items1 += "<option value='" + item1.Value + "'>" + item1.Text + "</option>";
});
$("#applicationFilter").html(items);
要使控制台正常工作,您需要在Firefox上使用Firebug扩展程序,或者只需在Chrome中调出Developer Console。