【问题标题】:Asp.net MVC 5 Ajax POST throws exception 404 (Not Found) after application is published发布应用程序后,Asp.net MVC 5 Ajax POST 抛出异常 404(未找到)
【发布时间】:2020-05-26 14:42:39
【问题描述】:

在本地一切正常(当我使用 localhost 运行时),但在我发布到 IIS 并运行后,它会在浏览器控制台中引发异常

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

下面是我的代码,我用一个按钮来调用这个javascript函数

查看 - 索引

<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>

控制器 - 仪表板控制器

    [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);

    }

知道这里有什么问题吗?我是网络开发的新手!帮帮我!

【问题讨论】:

  • 索引的 URL 是什么?
  • 仪表板/索引@freedomn-m

标签: jquery asp.net-mvc post asp.net-mvc-5 asp.net-ajax


【解决方案1】:

解决方案 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()

【讨论】:

  • 或者,更具体地说:url: '@Url.Action("FilterData", "Dashboard")',只要你把它保存在你的 .cshtml 中并且不要把它放在 .js 中
  • freedomn-m ,你能给我看一个 sn-p 吗?我得到了异常Uncaught SyntaxError: Invalid regular expression flags
  • @Phong 我的意思是如果你把它放在javascript中,你必须用引号括起来,否则你会得到无效的javascript,并且可能在 "invalid regular expression flags" 正在发生 - 即您的代码:url: /dashboard/filterdata 所需代码:url: '/dashboard/filterdata'(处理后)
  • 是的,当我们在javascript中使用它时需要单引号
  • 否 - 这将输出为:url: "'" + /dashboard/filterdata + "'" - 这不是一个有效的字符串
【解决方案2】:

我改成'@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 很好,否则它会显示异常无效的正则表达式
  • 我正在尝试确定路径是 /dashboard/filterdata 还是其他诸如 /yourapp/dashboard/filterdata 之类的东西
  • 不知道为什么这会被否决,这是其他两个答案的正确答案,虽然暗示,但没有提供具体/*正确*详细信息。
  • 实际上,我给出了这个想法以及代码(只是缺少引号)。所以 OP 只是测试并给我反馈,而不是回答他自己的问题。
【解决方案3】:

您需要将 ajax 请求中的 URL 更改为 URL: '/YourAppName/Controller/ActionResult',在 IIS 上发布后。这就是为什么永远不应该对 URL 进行硬编码的原因。您可以在剃刀页面中使用隐藏字段并填充 URL,如 @Url.Action("FilterData", "Dashboard") 并从那里读取。希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2016-07-17
    • 2014-03-06
    • 2011-04-24
    相关资源
    最近更新 更多