ajax フォーム送信を正常に適用するには、Register アクションとビューを変更する必要があります。デフォルトでは、エラーが発生した場合、このアクションは関連する register.aspx ビューを返すだけです。最初のステップは、部分的なユーザー コントロール内に検証の概要を配置することです。
ValidationSummary.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.ValidationSummary("Account creation was unsuccessful. Please correct the errors and try again.") %>
次に、この部分を Register.aspx ビュー内に含めます。
<div id="validationSummary">
<% Html.RenderPartial("ValidationSummary"); %>
</div>
<% using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %>
FORM CODE HERE
<% } %>
最後に、Register アクションを次のように変更します。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(string userName, string email, string password, string confirmPassword)
{
// ... skipped content for clarity
// If we got this far, something failed, redisplay form
if (Request.IsAjaxRequest())
{
// If an ajax request was made return only the validation errors
// instead of the whole page
return PartialView("ValidationSummary");
}
else
{
return View();
}
}
登録がデフォルトで成功した場合、登録アクションはホーム/インデックスにリダイレクトするだけです。ajax リクエストを実行しているとリダイレクトが機能しないため、このビットも変更する必要があります。アクションを非同期で呼び出しているかどうかを同じ方法でテストし、登録が成功したことを示すテキストを返します。div
このテキストは、検証エラーと同じ内部に表示されます。
アップデート:
最後の質問 - エラー メッセージの箇条書きリストの代わりに、Html.ValidationMessage("....") メソッドを使用して各コントロールのエラー メッセージをコントロールの横に表示するにはどうすればよいですか?
これを実現するには、フォームのコンテンツを部分ビュー内に配置する必要があります。
<% using (Ajax.BeginForm(
"register",
null,
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "myForm"
},
new {
id = "myForm"
})) { %>
<% Html.RenderPartial("RegisterForm"); %>
<% } %>
そして、登録アクションで正しいパーシャルをレンダリングします。
if (Request.IsAjaxRequest())
{
return PartialView("RegisterForm");
}
else
{
return View();
}