Controller中有这样一个方法 public ActionResult AffirmGetOTInfo(int id, string strStartTime, string strEndTime) { // 省略一大段内容,otInfo是一个自定义的封装返回信息类的实例 return Json(otInfo); } 在View的页面文件中有这样的调用。 $.post("<%= Url.Action<ApplicationController>(ac => ac.AffirmGetOTInfo(0, null, null)) %>", { id: $("#ApplicationID").val(), strStartTime: realStartTime, strEndTime: realEndTime }, function(json) { if (json.HolidayType == "0") { // 省略一大段内容 } ); 问题来了,json.HolidayType始终是undefined, 尝试在操作之前转换一下,用 var data = eval(json); 转换,结果来到这句就出错。既然post不行,我就换一种方式,用getJSON,代码如下: $.getJSON("<%= Url.Action<ApplicationController>(ac => ac.AffirmGetOTInfo(0, null, null)) %>", { id: $("#ApplicationID").val(), strStartTime: realStartTime, strEndTime: realEndTime }, function(json) { // 省略一大段内容 } ); 新的问题又出现了,-_-,回调函数同样没有执行。调试,从Firebug中的Console中发现,Ajax调用的方法返回的是“500 Internal Server Error”。VS加断点,发现能进入AffirmGetOTInfo这个方法,但id的值不能获取,始终为0; 纠结,搞了好久都没搞好。 晚上回去继续搞,终于在一个地方( ![]() $.getJSON("<%= Url.Action<ApplicationController>(ac => ac.AffirmGetOTInfo(Model.ApplicationID, null, null)) %>", { //无用,可以省略 //id: $("#ApplicationID").val(), strStartTime: realStartTime, strEndTime: realEndTime }, function(json) { // 省略一大段内容 } ); 后来,小SamSam(我的一个同事)也想起了post函数失效的原因,当post中回调函数需要处理的内容为Json时,需要显式指定第4个平时不需要指定的参数,代码修改如下: $.post("<%= Url.Action<ApplicationController>(ac => ac.AffirmGetOTInfo(0, null, null)) %>", { id: $("#ApplicationID").val(), strStartTime: realStartTime, strEndTime: realEndTime }, function(json) { if (json.HolidayType == "0") { // 省略一大段内容 }, "json" ); 这样就OK了。 |