文栏 - 信息技术 - 浏览文章 - jQuery以Json方式获取ASP.Net MVC 1.0中返回的JsonResult
jQuery以Json方式获取ASP.Net MVC 1.0中返回的JsonResult
发布时间: 2009/12/16 21:43:52 作者: 素素 出处: 本站发布
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;
    
纠结,搞了好久都没搞好。

晚上回去继续搞,终于在一个地方(http://topic.csdn.net/u/20081225/18/0aed87bc-d9c4-44ba-8556-3c976786ebd2.html )发现getJSON中的参数是指?后面的部分,改了改代码,变为下面的就OK了。

        $.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了。
所属分类: 信息技术   所属专题: 原创
共有 12901 人次浏览

评论作者:
电子邮件:
评论内容:
投票评价:
验 证 码:
图片包含4个随机字符,点击刷新
请输入上面图片中的随机字符