1

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

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

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

我搜索了自定义 JavaScript,它为所有链接附加了一个额外的点击事件,但没有这样的实例。在这种情况下是否有其他事件会产生相同的结果?

Chrome 开发者工具截图

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

0 回答 0