MVC - Ajax.BeginForm - 多次发布

时间:2012-01-19 14:02:33

标签: ajax asp.net-mvc razor

我创建了一个联系表单,该模型只包含...名称,电子邮件,电话号码等。

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

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

我的问题是验证失败。我在文本框上得到了通常的红色边框等。现在,如果用户更新文本框以匹配验证要求并再次提交,我收到两封电子邮件。它们中的两个完全相同的细节。然而,似乎很多次验证失败了,即我收到的电话(电子邮件)数量。

我对MVC很陌生,所以如果你能指出我的方向会很好。

干杯,

Ĵ

表格:

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

2 个答案:

答案 0 :(得分:0)

@jamie,如果表格多次提交,你能否签入firebug?如果可能,请发布ProcessContactSubmission代码。我也希望如此 如果(ModelState.IsValid)不在循环或其他东西中,如果是,那么请告诉我们什么

答案 1 :(得分:0)

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

今天我有同样的事情,我使用ajax表单中的提交按钮提交表单,每次提交时,帖子数量都会成倍增加!

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

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

而不是

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

希望它有助于其他人