0

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.

たとえば、ユーザー名が存在する場合など、毎回リダイレクトしたくありません。

4

1 に答える 1

1

これを行うには、部分ビューを html として返すことができます。レンダリングされたパーシャルにはモデル状態エラーが含まれるため、html として返されたときに表示されます。

AjaxResult というクラスを作成できます

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

次に、ajax 呼び出しの成功関数で、適切な要素に html を追加できます。例えば

$.ajax({
    url: 'http://bacon/receive', 
    dataType: "json",
    type: "POST",
    error: function () {
    },
    success: function (data) {
        if (data.Success) {
            $('body').append(data.Html);
        }
    }
});
于 2013-04-03T15:40:58.773 に答える