【发布时间】:2016-10-21 14:35:40
【问题描述】:
我在 Items 控制器上执行此操作
[HttpGet]
public JsonResult Search(string data, int id)
{
var date = DateTime.Now;
if(!string.IsNullOrEmpty(data))
date = DateTime.Parse(data);
var result = Repository.FindBy(date, id); // (1)
return Json(result, JsonRequestBehavior.AllowGet);
}
我用 jQuery 调用它
function successHandler(success){
console.log(success); // (2)
return success;
}
function errorHandler(error){
console.error(error); // (3)
return error;
}
$.ajax({
type: 'GET',
contentType: 'application/json',
url: '/Items/Date/2015-01-01/Id/2',
}).then(successHandler, errorHandler);
如果我在 (1) 中放置一个断点并启动 jQuery ajax 调用,调试器会遇到断点,我可以看到 result 是一个有效的 IEnumerable<Item> 并且 Action 返回。
如果我在 (2) 中放置断点,它永远不会被命中,并且在 (3) 中,error 的值是
{ readyState: 4,
responseText: "",
status: 200,
statusText: "OK" }
这不是错误。
如果我直接调用 URL (http://localhost:26252/Items/Search/2015-01-01/Id/2),我会得到一个空页面,并且使用 Firebug 的控制台会得到相同的响应。
发生了什么事?
编辑:
此操作的自定义路由是
routes.MapRoute(
name: "Items",
url: "Items/Date/{date}/Id/{id}",
defaults: new { controller = "Items", action = "Search" }
);
默认是
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
【问题讨论】:
-
附带问题:那是什么类型的 javascript?括号是否消失了,还是某种解析器?
-
这是咖啡脚本。您希望我粘贴编译后的版本吗?
-
是的。请发布生成的js。您的操作方法还有自定义路由模板吗?
-
您是否为此操作方法设置了自定义路由模式以匹配您正在调用的 url?您的浏览器开发工具网络选项卡中此 ajax 请求的状态是什么?还有什么反应回来?
-
“我从控制台得到的响应”是 HTTP 标头,与我在问题中输入的 JSON 相同
标签: jquery asp.net-mvc asp.net-mvc-4