单击Ajax.ActionLink会生成GET和POST

时间:2018-12-07 14:56:08

标签: razor asp.net-mvc-5 devexpress-mvc unobtrusive-ajax

在我刚刚继承的该应用程序中单击某个Ajax ActionLink会生成一个POST请求和一个GET请求(POST,然后紧接着是GET)。第一个请求命中服务器上的HttpPost方法,但是第二个请求(GET)在浏览器中引发“ 404(未找到)”错误。如何停止不需要的GET请求?它来自哪里?

如果我将方法从POST更改为GET,则相反的情况是POST引发错误而不是GET。

我在应用程序中搜索了与配置为GET的HttpPost方法类似的请求,但没有。

我搜索了自定义JavaScript,该JavaScript将一个额外的click事件附加到所有链接,但是没有任何实例。可能还会有其他事件在这种情况下产生相同的结果吗?

Chrome DevTools Screenshot

在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();

0 个答案:

没有答案