发布应用程序后,Asp.net MVC 5 Ajax POST抛出404(未找到)异常

3
当我本地运行时(使用localhost),一切都很正常。但是当我将其发布到IIS并运行后,在浏览器控制台中抛出异常。

POST http://xx.xxx.x.x/Dashboard/FilterData 404 (未找到)

以下是我的代码,我使用一个按钮调用这个javascript函数。

VIEW - Index

<script type="text/javascript">

    function btnFilterClick() {

        var txtFDate = $("#dpFrom");
        var txtTDate = $("#dpTo");
        var ddBranches = $("#ddBranches");
        var ddBrands = $("#ddBrands");

        $.ajax({
            type: "POST",
            url: "/Dashboard/FilterData",
            data: '{FromDate: "' + txtFDate.val() + '", ToDate: "' + txtTDate.val() + '", SelectedBranches : "'+ ddBranches.val()+'", SelectedBrands : "'+ ddBrands.val()+'" }',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success:
                function (r)
                {
                    chartPurchaseVsSales.data.datasets[0].data = r.listSalesData;
                    chartPurchaseVsSales.data.datasets[1].data = r.listPurchaseData;
                    chartPurchaseVsSales.data.labels = r.xAxisNameForPurchaseAndSales;
                    chartPurchaseVsSales.update();


                }
        });


    }

    </script>

控制器 - 仪表盘控制器(DashboardController)

    [HttpPost]
    [Authorize]
    public JsonResult FilterData(DashboardModel modelX)
    {
        DashboardModel model = new DashboardModel();
        model.xAxisNameForPurchaseAndSales = new string[] { };
        model.xAxisNameForStock = new string[] { };



        *Skipped some codes to make it simple*

        return Json(model);

    }

这里出了什么问题?我是web开发的新手!请帮帮我!


索引的URL是什么? - freedomn-m
仪表板/首页 @freedomn-m - Lazy Programer
3个回答

3

解决方案 1

您可以像下面这样更改url: "/Dashboard/FilterData",

url: '@Url.Action("FilterData", "Dashboard")'

解决方案2

在HTML中

<input type="hidden" value="@Url.Action("FilterData", "Dashboard")" id='url' />

在jQuery中

url: $("#url").val()

1
或者更具体地说:只要您将此代码放在.cshtml文件中,而不是放在.js文件中,就可以使用url: '@Url.Action("FilterData", "Dashboard")' - freedomn-m
freedomn-m,您能否给我展示一段代码片段吗?我遇到了异常Uncaught SyntaxError: Invalid regular expression flags - Lazy Programer
1
@Phong 我的意思是,如果您把它放在javascript中,必须用引号括起来,否则您会得到无效的javascript,可能会发生“无效的正则表达式标志” - 也就是说,您的代码: url: /dashboard/filterdata 需要修改为 url:'/dashboard/filterdata'(处理后)。 - freedomn-m
在 JavaScript 中使用时,需要使用单引号。 - Lazy Programer
@懒惰的程序员 请检查我的答案并给我反馈。 - Nguyễn Văn Phong
显示剩余3条评论

3
我把代码更改为'@Url.Action("FilterData", "Dashboard")',现在它可以正常工作了!谢谢你们。以下是我的代码:
 $.ajax({
        type: "POST",
        url: '@Url.Action("FilterData", "Dashboard")',
        data: '{FromDate: "' + txtFDate.val() + '", ToDate: "' + txtTDate.val() + '", SelectedBranches : "'+ ddBranches.val()+'", SelectedBrands : "'+ ddBrands.val()+'" }',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success:
            function (r)
            {
                chartPurchaseVsSales.data.datasets[0].data = r.listSalesData;
                chartPurchaseVsSales.data.datasets[1].data = r.listPurchaseData;
                chartPurchaseVsSales.data.labels = r.xAxisNameForPurchaseAndSales;
                chartPurchaseVsSales.update();


            }
    });

URL在单引号内时是正确的(来源),否则会显示异常无效正则表达式。 - Lazy Programer
我正在尝试确定路径是否为/dashboard/filterdata或其他路径,例如/yourapp/dashboard/filterdata - freedomn-m
不确定为什么这个回答会被踩,它是正确的答案,而其他两个答案虽然有所暗示,但并未提供具体/正确/的细节。 - freedomn-m
事实上,我提供了这个想法和相应的代码(只是少了引号)。所以问题的作者只需要测试并给我反馈,而不是回答自己的问题。 - Nguyễn Văn Phong

0

在将应用程序发布到IIS之后,您需要更改ajax请求中的URL为URL: '/YourAppName/Controller/ActionResult'。这就是为什么URL不应该硬编码的原因。您可以在razor页面中使用隐藏字段,并像@Url.Action("FilterData", "Dashboard")一样填充URL,然后从那里读取它。希望能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接