Asp. net MVC 5 Ajax POST генерирует исключение 404 (не найдено) после публикации приложения - PullRequest
2 голосов
/ 11 февраля 2020

Локально все работает (когда я запускаю с 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);

    }

Есть идеи, что здесь не так? Я новичок ie в веб-разработках! Помоги мне!

Ответы [ 3 ]

1 голос
/ 11 февраля 2020

Я поменял на '@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();


            }
    });
1 голос
/ 11 февраля 2020

Решение 1

Вы можете изменить значение с url: "/Dashboard/FilterData",, как показано ниже

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

Решение 2

In HTML

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

In Jquery

url: $("#url").val()
0 голосов
/ 11 февраля 2020

вам нужно изменить URL в вашем запросе ajax на URL: '/ YourAppName / Controller / ActionResult' после публикации в IIS. Вот почему URL никогда не должен быть жестко закодирован. Вы можете использовать скрытое поле на своей странице бритвы и заполнить URL-адрес, например @ Url.Action ("FilterData", "Dashboard"), и прочитать его оттуда. Надеюсь, это поможет.

...