CaptchaMvc使用Ajax.beginform asp.net mvc4

时间:2015-02-28 17:07:57

标签: asp.net ajax asp.net-mvc asp.net-mvc-4 captcha

我在我的asp.net mvc4应用程序中使用CaptchaMvc.Mvc4 1.5.0。 这是我的观点:

@using CaptchaMvc.HtmlHelpers;
@using CaptchaMvc;
@model Web.Models.Message
@using (Ajax.BeginForm("Contact", "Home", new AjaxOptions
{
    HttpMethod = "post",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "Sent"
}
{
            @Html.AntiForgeryToken()
            @Html.ValidationSummary(true)
            <fieldset>                       
            @Html.LabelFor(model => model.Name)
            <div>
            @Html.TextBoxFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
            </div>  
            @Html.LabelFor(model => model.Email)
            <div>
            @Html.TextBoxFor(model => model.Email)
            @Html.ValidationMessageFor(model => model.Email)
            </div>                              
            @Html.LabelFor(model => model.Message1)
            <div>
            @Html.TextBoxFor(model => model.Message1)
            @Html.ValidationMessageFor(model => model.Message1)
            </div>

            @Html.MathCaptcha()

            <input type="submit" value="Create" />
            </fieldset>

            <div id="Sent">
            </div>
  }

这是我的行动方法:

[HttpPost]
public ActionResult Contact(Message message)
{
   if(this.IsCaptchaValid("error"))           
   if (ModelState.IsValid )
   {
       db.Messages.Add(message);
       db.SaveChanges();
       return RedirectToAction("SuccessfullySent");
    }

    ModelState.AddModelError("", "there is some error");
    return View(message);
}

当验证码输入有效时,它可以正常工作。 问题是当验证码无效时,整个视图将在id =“已发送”的div中呈现。所以我在一个页面中呈现了两个消息视图。 如何阻止它在id =“已发送”的div中再次呈现整个视图?

1 个答案:

答案 0 :(得分:0)

您将返回用于初始呈现页面的View

这意味着更新的div将被整个页面替换。

您可以按如下方式返回消息:

return Content("there is some error");

将消息输出到发送的div。

或者,如果它包含更多Html,您可以返回PartialView并按如下方式传递消息:

return PartialView("_errorPartial", "there is some error");