我正在尝试将一些文本从文本框传递到控制器以获取JSON结果,如此
function invokeAction() {
var searchText = $("#SearchTextBox").val();
// Invoke MVC controller action
$.getJSON("/Home/Results/" + searchText, bindResults);
}
如果我在此处发出提醒,我可以看到searchText肯定有一个值,但是当我在此控制器操作上设置断点时:
public ActionResult Results(string search)
{
var r = from t in db.Restaurants
where SqlMethods.Like(t.Name, "%" + search + "%") || SqlMethods.Like(t.Postcode, search + "%") || SqlMethods.Like(t.CuisineType.Type, search + "%")
orderby t.Name ascending
orderby t.Rating descending
orderby t.NumOfViews
descending
select t;
return Json(r.ToList());
}
传入的字符串为null,但是当我在调试器中检查http上下文时,我的searchtext是url的一部分。
由于这是null,查询不返回任何结果。
我在这里错过了什么吗?
答案 0 :(得分:9)
我在服务中返回json时出现了一些问题,而且我没有收到任何回电。事实证明,json格式错误,我能够通过处理普通ajax调用的错误选项来测试并获得这些错误。
$.ajax({
type: "GET",
url: "Home/Results/",
data: { search: searchText },
dataType: "json",
error: function(xhr, status, error) {
// you may need to handle me if the json is invalid
// this is the ajax object
},
success: function(json){
alert( "Data Returned: " + json);
}
});
答案 1 :(得分:3)
您必须修复路线并将{id}替换为{search},以便将其绑定到正确的参数 - 尝试以下方法:
routes.MapRoute("search", "Home/Results/{search}",
new { controller = "Home", action = "Results" });
如果您不想这样做,可以通过将参数名称指定为标准查询字符串参数来完成此操作
$.getJSON("/Home/Results?search=" + searchText,bindresults);
将修复绑定。