ASP.Net MVC 5 ActionResult抛出404异常

时间:2016-12-28 06:09:22

标签: asp.net-mvc-5

我正在大脑冻结: 我有一个MVC 5项目,它使用bootstrap popover表单来输入日期数据。弹出窗口在主着陆页上调用,数据被字符串化JSON转发到Home控制器中的ActionResult函数,然后Home控制器访问SQL Server db并返回一个JSON数据集,用于构建在cshtml视图中呈现的基于D3的可视化。 到目前为止,每件事都有效,数据是有效的模型和viz已经过单元测试。 Home控制器有两个控制器: popover js脚本(来自http://jsfiddle.net/itsabhik/cxm4rt2u/2/):

        $('.main-attributes').on('shown.bs.popover', function () {
        $('.submit').click(function () {
            var fromval = $('.popover #fromvalue').val();
            var toval = $('.popover #tovalue').val();
                    var option = {
                        url: '/Home/LoanCount',
                        data: JSON.stringify({ dStart: fromval, dEnd: toval }),
                        method: 'post',
                        dataType: 'json',
                        contentType: 'application/json;charset=utf-8'
                    };

            $.ajax(option).done(function (data) {
                        return (data);
            })
            $('.main-attributes').popover('hide');
        });
        $('.cancel').click(function () {
            $('.main-attributes').popover('hide');
        });
    });

控制器代码:

        public ActionResult LoanCount(DateTime dStart, DateTime dEnd)
    {
        int iStart = (dStart.Year * 10000) + (dStart.Month * 100) + dStart.Day;
        int iEnd = (dEnd.Year * 10000) + (dEnd.Month * 100) + dEnd.Day;

        var json = Models.LoanCount.getCountStats (iStart, iEnd);
        var data = JsonConvert.DeserializeObject<List<Models.LoanCount>> (json);

        ViewBag.jData = json;

        return Redirect ("/Views/Home/LoanCount.cshtml");  /* This is one of the 
                                    redirect variations                                             that have been tried */
    }

我遇到的问题是我使用的所有Redirect变体都会抛出404未找到的异常。调用RedirectToAction(...),无参数的ActionResult会抛出403异常。存在cshtml文件,路径已经过验证和更正。

正在使用的浏览器是Chrome。缺少什么 - 关于这个问题的任何线索,建议?

2 个答案:

答案 0 :(得分:0)

您可以使用波浪号(〜)前缀返回视图。因此,URL不会更改。

return View("~/Views/Home/LoanCount.cshtml");

如果要更改URL,则必须使用控制器名称和方法名称的RedirectToAction方法。

答案 1 :(得分:0)

上一条评论:胖手指输入密钥。修复是禁用ajax func,因为它发布了一个回调,用参数值重做URL并定义窗口位置而不是发出ajax调用。它现在按预期工作。哇!!

        $('.main-attributes').on('shown.bs.popover', function () {
        $('.submit').click(function () {
            var fromval = $('.popover #fromvalue').val();
            var toval = $('.popover #tovalue').val();
            var option = {
                url: "/Home/LoanCount?dStart=" + fromval + "&" + "dEnd=" + toval,
                data: JSON.stringify({ dStart: fromval, dEnd: toval }),
                method: 'post',
                dataType: 'json',
                contentType: 'application/json;charset=utf-8'
            };

            window.location.href = option.url;

            $('.main-attributes').popover('hide');
        });

        $('.cancel').click(function () {
            $('.main-attributes').popover('hide');
        });
    });

控制器:

        public ActionResult LoanCount(DateTime dStart, DateTime dEnd)
    {
        int iStart = (dStart.Year * 10000) + (dStart.Month * 100) + dStart.Day;
        int iEnd = (dEnd.Year * 10000) + (dEnd.Month * 100) + dEnd.Day;

        var json = Models.LoanCount.getCountStats (iStart, iEnd);
        var data = JsonConvert.DeserializeObject<List<Models.LoanCount>> (json);

        ViewBag.jData = json;

        return View ("~/Views/Home/LoanCount.cshtml");
    }