ASP.NET MVC 表单提交两次

Posted

技术标签:

【中文标题】ASP.NET MVC 表单提交两次【英文标题】:ASP.NET MVC Form Submitting Twice 【发布时间】:2018-06-07 06:30:09 【问题描述】:

我有一个简单的表格,里面有几个问题。我正在使用此 (https://cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js) 库验证是否在提交表单之前填写了输入。

我的表格是这样的:

@using (html.BeginForm("SaveAnswer", "Home", new  ReturnUrl = ViewBag.ReturnUrl , FormMethod.Post, new  @class = "form-horizontal", id = "answer", role = "form" ))
             //.... Q1, Q2 ...etc

              <!-- Button (Double) -->
            <div class="form-group form-submit-button">
                <label class="col-md-4 control-label" for="button1id">Please save your response.</label>
                <div class="col-md-8">
                <button type='submit' id="Save" name="SaveButton" class="btn btn-success">Save</button>
                </div>
            </div>
 

表单有效,验证(如果输入已填写)有效。

除了数据库有2个条目!!

这意味着表单提交时有 2 个请求。我真的没有提交 2 次。

后端控制器是:

    [AcceptVerbs(HttpVerbs.Post)]  
    public ActionResult SaveAnswer(FormCollection form)
    
        var AnswerToAdd = new Answer();

        // Deserialize (Include white list!)
        TryUpdateModel(AnswerToAdd, new string[]  "Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "id", form.ToValueProvider());

        DateTime now = DateTime.Now;

        AnswerToAdd.LastModifiedTime = now;

        db.Answers.Add(AnswerToAdd);

        db.SaveChanges();

        return RedirectToAction("Index"); 


    

【问题讨论】:

您的代码看起来不错。也发布后端代码。这可能会造成一些麻烦 您的页面中可能有多个对jquery.unobtrusive-ajax.js 的引用。你能确保你没有多次包含这个js吗? @It'satrap thx,我已经发布了控制器代码。 @Arul 不,表单的页面对于每个库只有 1 个链接,即一个用于 jquery 一个用于验证器库...我的页面上没有包含 jquery.unobtrusive-ajax.js 库. 您的后端代码看起来也不错。可以肯定的是,只需查看浏览器的网络选项卡,查看单击提交按钮时发出了多少 http 请求。还要确保在调试模式下运行项目并在SaveAnswer 上放置断点,并查看单击提交按钮时它是否被击中两次。这将帮助您缩小问题是客户端还是服务器端的范围。 【参考方案1】:

一周前遇到了这个问题并尝试了我能做的一切,但最后的修复是 chrome 导致了这个问题,当切换回 microsoft edge 时,服务器/数据库上没有重复发布。

如果您发现此问题的任何其他原因,请告诉我们。

【讨论】:

以上是关于ASP.NET MVC 表单提交两次的主要内容,如果未能解决你的问题,请参考以下文章

单击复选框时 ASP.NET MVC 提交表单

ASP.NET MVC 表单提交多层子级实体集合数据到控制器中

asp.net mvc 3 - ajax 表单提交和验证

ASP.Net MVC 4 在表单提交时设置“onsubmit”

Asp.net Mvc Ajax.BeginForm提交表单

在 ASP.NET MVC Preview 4 中使用路由引擎进行表单提交