简体   繁体   English

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

[英]Asp.net MVC 5 Ajax POST throws exception 404 (Not Found) after application is published

Everything works fine locally (When i run with localhost), But after i published to IIS and runs, it throws exception in browser console本地一切正常(当我使用本地主机运行时),但是在我发布到 IIS 并运行后,它在浏览器控制台中引发异常

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

Below is my code, I am using a button to call this javascript function下面是我的代码,我使用一个按钮来调用这个 javascript 函数

VIEW - Index VIEW - 索引

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

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

    }

Any idea whats wrong here ?知道这里有什么问题吗? I am newbie in web developments!我是网络开发的新手! Help Me!帮我!

I changed to '@Url.Action("FilterData", "Dashboard")' and it works fine!我改为'@Url.Action("FilterData", "Dashboard")'并且它工作正常! Thank you, guys.谢谢你们。

Below is my code下面是我的代码

 $.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();


            }
    });

Solution 1解决方案1

You can change from url: "/Dashboard/FilterData", like below您可以从url: "/Dashboard/FilterData",更改url: "/Dashboard/FilterData",如下所示

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

Solution 2解决方案2

In HTML在 HTML 中

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

In Jquery在jQuery中

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

you need to change the URL in your ajax request to URL: '/YourAppName/Controller/ActionResult' , after publishing it on IIS.在 IIS 上发布后,您需要将 ajax 请求中的URL更改为URL: '/YourAppName/Controller/ActionResult' This is why the URL should never be hardcoded.这就是 URL 不应该被硬编码的原因。 You can use a hidden field in your razor page and populate the URL like @Url.Action("FilterData", "Dashboard") and read it from there.您可以在剃刀页面中使用隐藏字段并填充 URL,如 @Url.Action("FilterData", "Dashboard") 并从那里读取它。 I hope it helps.我希望它有帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM