Ajax.BeginForm两次发布到控制器(ASP.NET MVC5)

时间:2016-09-14 09:24:44

标签: jquery ajax asp.net-mvc

我已经使用Ajax帮助程序在我的网站中创建了下面的几个表单,但由于某种原因,这个表单在提交时会向服务器发送两次。我可以看到开发工具中的帖子立即发生提交表单。它们之间唯一的区别是第一个有一个额外的标题(X-Requested-With:XMLHttpRequest)。

我已经阅读了Stackoverflow上的一些答案,建议我可能有重复的jquery.unobtrusive文件请求,但我检查了源和开发工具,只能找到一个实例。我也找不到任何可能提交表格的其他代码。

如果我删除了jquery.unobtrusive库,那么表单提交一次但不是AJAX请求,所以问题必须在这个库的某处,以及我如何设置表单。

我的观点如下:

@using (Ajax.BeginForm("_Action", "Controller", null, new AjaxOptions
{
    HttpMethod = "POST",
    OnBegin = "beginFunc",
    OnComplete = "completeFunc",
    OnSuccess = "successFunc",
    OnFailure = "failureFunc"
},
new { id = "form-id", @class = "loading-container" }))
{
    @Html.AntiForgeryToken()
    <div class="form-input">
        @Html.EditorFor(m => m.PropertyName)
        @Html.ValidationMessageFor(m => m.PropertyName)
    </div>
    <button type="submit" class="right-arrow">Submit</button>
}

我的行动如下:

[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult _Action(ViewModel vm)
{
    // Method code goes here
}

在我的BundleConfig.cs中,我有以下内容

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.validate.unobtrusive*", "~/Scripts/jquery.unobtrusive*"));

任何人都可以提供有关如何调试此内容或我可以检查的内容的任何其他建议吗?

2 个答案:

答案 0 :(得分:0)

您可能在页面上多次包含jquery-unobtrusive-ajax.js。  这导致表格被多次发布。

您必须确保它只包含一次。

答案 1 :(得分:0)

我认为您对缓存有问题,可以尝试在控制器操作上使用OutputCacheAttribute来禁用缓存。

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public JsonResult _Action(ViewModel vm)
 {
     ModelState.Clear();
     ////your code
 }

请告诉我们是否可行