Нажатие Ajax.ActionLink производит GET и POST - PullRequest
0 голосов
/ 07 декабря 2018

Нажатие на определенную Ajax ActionLink в этом приложении, которое я только что унаследовал, создает запрос POST И запрос GET (POST, а затем GET сразу после).Первый запрос обращается к методу HttpPost на сервере, но второй запрос (GET) выдает ошибку «404 (не найдено)» в браузере.Как мне остановить нежелательный запрос GET?Откуда это происходит?

Если я изменяю метод с POST на GET, происходит обратное, когда POST выдает ошибку вместо GET.

Я искал в приложении похожие запросытот же метод HttpPost, который был настроен как GET, и его нет.

Я искал пользовательский JavaScript, который прикреплял дополнительное событие click ко всем ссылкам, и не было ни одного экземпляра этого.Могут ли быть другие события, которые приведут к тому же результату в этом случае?

Снимок экрана Chrome DevTools

В DocumentManagementController.cs:

[HttpPost]
public ActionResult OpenPopup(string ntgLoadId) { ... }

В _GridLoadsAddendum.cshtml:

@Html.DevExpress().GridView(
settings =>
{
    settings.Name = "DetailedGrid_" + Model.LoadId;
    settings.Width = Unit.Percentage(100);
    settings.Settings.ShowFilterRow = false;
    settings.Settings.ShowGroupPanel = false;
    settings.Settings.ShowFooter = false;
    settings.Settings.ShowColumnHeaders = false;
    settings.KeyFieldName = "NtgLoadId";

    settings.Columns.Add(column =>
    {
        column.FieldName = "Status";
        column.Caption = "Status";
        column.Width = Unit.Pixel(83);
        column.SetDataItemTemplateContent(c =>
        {
            ViewContext.Writer.Write(
                Ajax.ActionLink(
                    DataBinder.Eval(c.DataItem, "Status").ToString(),
                    "OpenPopup",
                    "DocumentManagement",
                    new
                    {
                        ntgLoadId = c.KeyValue.ToString()
                    },
                    new AjaxOptions
                    {
                        HttpMethod = "POST",
                        InsertionMode = InsertionMode.Replace,
                        UpdateTargetId = "ModalContainer",
                        AllowCache = false
                    },
                    new
                    {
                        @class = "status-link",
                        data_Toggle = "modal",
                        data_Target = "#ModalContainer",
                        data_backdrop = "static",
                        data_Keyboard = "false"
                    }).ToHtmlString());
        });
    });

    settings.Styles.Table.CssClass = "MVCxGridViewTable";
    settings.Styles.Header.CssClass = "MVCxGridViewHeader";
    settings.Styles.Cell.CssClass = "MVCxGridViewCell addendum";
    settings.Styles.CommandColumnItem.CssClass = "MVCxGridViewCell";
    settings.Styles.AlternatingRow.CssClass = "MVCxGridViewAlternatingRow addendum";
    settings.Styles.PagerBottomPanel.CssClass = "MVCxGridViewPagerBottomPanel";
    settings.Settings.ShowFooter = false;
    settings.ClientSideEvents.BeginCallback = "initechPortal.carrierPaymentStatusHelper.gridResultsHelper.beginCallback";
    settings.CallbackRouteValues = new
    {
        Controller = "CarrierPaymentController",
        Action = "GridLoadsAddendum",
        Id = Model.LoadId
    };
    settings.DataBound = (sender, e) =>
    {
        MVCxGridView gv = sender as MVCxGridView;
        gv.Visible = gv.VisibleRowCount > 0;
    };
}).BindToLINQ(
    string.Empty,
    string.Empty,
    new EventHandler<DevExpress.Data.Linq.LinqServerModeDataSourceSelectEventArgs>(
    (s, e) =>
    {
        e.QueryableSource = Model.CarrierPaymentResultData;
        e.KeyExpression = "ntgLoadId";
    })).GetHtml();
...