【问题标题】:MVC - Ajax.BeginForm - Posting multiple timesMVC - Ajax.BeginForm - 多次发布
【发布时间】:2012-01-19 14:02:32
【问题描述】:

我创建了一个联系表格,模型由简单的..姓名、电子邮件、电话号码等组成。

在模型上,我对某些属性有一些简单的必需属性。

这一切都很好,当没有发生验证错误时,我收到一封电子邮件,说明表单已提交,并向用户显示一条漂亮的小“谢谢”消息。

我的问题是验证失败时。我在文本框等上得到通常的红色边框。现在,如果用户更新文本框以匹配验证要求并再次提交,我会收到两封电子邮件。两者的细节完全相同。无论您多次验证我收到多少电话(电子邮件),似乎都失败了。

我对 MVC 很陌生,所以如果你能指出我正确的方向,那就太好了。

干杯,

J

表格:

using (Ajax.BeginForm("ProcessContact", "Contact", null, new AjaxOptions { UpdateTargetId = "subContentWrapper", }))
            {
            @Html.ValidationSummary()

            <p>
                <strong>Please tell us a little about you and the nature of your enquiry </strong>
            </p>
            <table>
                <tr>
                    <td style="width: 200px;">
                        Name:
                    </td>
                    <td>@Html.TextBoxFor(x => x.Name, new { @class = "textBox" })
                    </td>
                </tr>
                <tr>
                    <td>
                        Company Name:
                    </td>
                    <td>@Html.TextBoxFor(x => x.CompanyName, new { @class = "textBox" })
                    </td>
                </tr>
                <tr>
                    <td>
                        E-mail:
                    </td>
                    <td>@Html.TextBoxFor(x => x.Email, new { @class = "textBox" })
                    </td>
                </tr>
                <tr>
                    <td>
                        Phone:
                    </td>
                    <td>@Html.TextBoxFor(x => x.Phone, new { @class = "textBox" })
                    </td>
                </tr>
            </table>

            <br />
            <br />
            <p style="text-align: center">
                <input type="submit" value="Contact Us" /></p>
            }
        }

代码:

if (ModelState.IsValid)
        {
            if (ContactService.ProcessContactSubmission(model))
            {
                ViewBag.Sent = true;
            }
            else
            {
                ViewBag.Sent = false;
                ModelState.AddModelError("", "Sorry an error has occured, please try again later.");
            }
            return PartialView("~/Views/Modules/Contact Us/Main.cshtml", model);
        }
        else
        {
            ViewBag.Sent = false;
            return PartialView("~/Views/Modules/Contact Us/Main.cshtml", model);
        }

ContactService.ProcessContactSubmission(model) - 这只是发送电子邮件并返回 true/false

【问题讨论】:

  • 我已更新帖子以包含代码片段。谢谢
  • 什么是“subContentWrapper”?它是围绕 AJAX 表单的 DIV 吗?
  • 这是我正在更新其内容的 div - 一切正常且符合预期。

标签: ajax asp.net-mvc razor


【解决方案1】:

@jamie,如果表单被多次提交,你能签入 firebug 吗?如果可能,请同时发布 ProcessContactSubmission 代码。我也希望 if (ModelState.IsValid) 不在循环之类的,如果是,请告诉我们什么

【讨论】:

    【解决方案2】:

    旧线程,但我想我会把我的发现扔进帽子里。

    我今天也遇到了同样的事情,我在 ajax 表单中使用提交按钮提交了一个表单,每次我提交它时,帖子的数量都会成倍增加!

    检查了所有内容,没有重复的不显眼的 js 文件等,我只是将提交按钮更改为标准输入标签,手动提交表单,嘿,只发一个帖子!

    <input type="button" value="Next" onclick="$('#formtosubmit').submit();" />
    

    而不是

    <input type="submit" value="Next" />
    

    希望对他人有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多