使用ajax加载ValidationSummary

时间:2013-04-03 14:45:50

标签: ajax asp.net-mvc-4

如何使用ajax加载ValidationSummary?我试图使用MVC的成功会员资格。
简单的问题,但我被卡住了。

[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    [RecaptchaControlMvc.CaptchaValidator]
    public ActionResult Register(RegisterModel model, bool captchaValid, string captchaErrorMessage)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
                try
                {
                    if (captchaValid)
                    {
                        WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
                        WebSecurity.Login(model.UserName, model.Password);
                        return RedirectToAction("Index", "Home");
                    }
                    ModelState.AddModelError("", captchaErrorMessage);
                }
                catch (MembershipCreateUserException e)
                {
                    ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
                }

        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

查看:

@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary()

<fieldset>
    <legend>Registration Form</legend>
    <ol>
        <li>
            @Html.LabelFor(m => m.UserName)
            @Html.TextBoxFor(m => m.UserName)
            @Html.ValidationMessageFor(m => m.UserName)
            <input type="hidden" id ="some" value=""/>
        </li>etc.

我不想每次重定向,例如,如果用户名存在等等。

1 个答案:

答案 0 :(得分:1)

要执行此操作,您可以将部分视图作为html返回。渲染的部分将包含模型状态错误,因此将在以html格式返回时显示。

示例

可以创建一个名为AjaxResult的类

public class AjaxResult
{
    public string Html { get; set; }
    public bool Success { get; set; }
}

然后在ajax调用的成功函数中,您可以将html附加到相应的元素。 e.g。

$.ajax({
    url: 'http://bacon/receive', 
    dataType: "json",
    type: "POST",
    error: function () {
    },
    success: function (data) {
        if (data.Success) {
            $('body').append(data.Html);
        }
    }
});