ajaxで検証したい簡単なログインフォームを作成しました。
MVCによって生成されたサーバー側の検証エラーを表示するための最も適切な方法は何ですか?エラーをJSON結果に変換し、エラーメッセージを取り除くことは適切ですか?そうでない場合は、どうなりますか?
現在、私が持っているのは正しく投稿していますが、フォーム全体が戻ってきます。目標は、ポストバック/更新なしでサーバー側のエラーをフォームに表示することです。事前に感謝します...ここに私のコードがあります:
メインビュー-Login.vbhtml
@ModelType UHCO_MVC_Agency.LoginModel
<div class="error-container">@Html.ValidationSummary(True)</div>
<div class="row-fluid">
<div class="span12">
<div id="login-form" class="span6">
@Using Html.BeginForm()
@<fieldset>
<legend>Log in to your account now</legend>
<div class="row-fluid">
<div class="span12">
@Html.LabelFor(Function(m) m.UserName)
@Html.TextBoxFor(Function(m) m.UserName, New With {.class = "span12", .placeholder = "Username"})
@Html.ValidationMessageFor(Function(m) m.UserName)
</div>
</div>
<div class="row-fluid">
<div class="span12">
<label for="Password">Your password</label>
@Html.PasswordFor(Function(m) m.Password, New With {.class = "span12", .placeholder = "Password", .type = "password"})
@Html.ValidationMessageFor(Function(m) m.Password)
</div>
</div>
<div class="row-fluid">
<div class="span12">
<label for="RememberMe" class="checkbox clearfix">
@Html.CheckBoxFor(Function(m) m.RememberMe)
Remember me next time I visit
</label>
</div>
</div>
<button type="submit" class="btn btn-primary input-small" value="submit">Log in</button>
</fieldset>
End Using
</div>
</div>
</div>
コントローラー-AccountController.vb
<HttpPost()> _
Public Function Login(ByVal model As LoginModel, ByVal Username As String, ByVal Password As String, ByVal returnUrl As String) As ActionResult
Dim res As New LoginResponse()
Try
'login here
If Not String.IsNullOrEmpty(returnUrl) AndAlso Url.IsLocalUrl(returnUrl) Then
res.Status = "Success"
Return RedirectToAction("Welcome", "Account")
End If
Catch ex As Exception
If Not HttpContext.Request.IsAjaxRequest() Then
ModelState.AddModelError("", ExceptionWrapper.Wrap(ex).ExceptionMessage())
Return View("Login", model)
Else
res.Status = "Failed"
res.Errors.Add(ExceptionWrapper.Wrap(ex).ExceptionMessage())
Return Json(res)
End If
End Try
' If we got this far, something failed, redisplay form
Return View(model)
End Function
Application.js
$("#login-form form").live().submit(function (e) {
e.preventDefault();
alert("ok");
});