これが私の元の作成ページです(ネストなし)-クライアント検証が機能します
@model TennisClub.ViewModels.ClubMember.EditorModel
@{
ViewBag.Title = "New Club Member";
ViewBag.LegendTitle = "Club Member";
}
<h2>@ViewBag.Title</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true, "Errors were found on the form. Please correct all errors and try again.")
<fieldset>
<legend>@ViewBag.LegendTitle</legend>
@Html.EditorForModel()
<p><input type="submit" value="Create" /></p>
</fieldset>
}
<div>@Html.ActionLink("Back to List", "Index")</div>
これが私の新しい作成ページです (ネストされています) - クライアントの検証に失敗します
@model TennisClub.ViewModels.ClubMember.EditorModel
@{
Layout = "~/Views/Shared/StandardLayouts/Create.cshtml";
ViewBag.Title = "New Club Member";
ViewBag.LegendTitle = "Club Member";
}
@Html.EditorForModel()
@if (ViewBag.CanUserAccessRestrictedContent)
上記のページで使用されているレイアウト (StandardLayouts/Create.cshtml) は次のとおりです。
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>@ViewBag.Title</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true, "Errors were found on the form. Please correct all errors and try again.")
<fieldset>
<legend>@ViewBag.LegendTitle</legend>
@RenderBody()
<p><input type="submit" value="Create" /></p>
</fieldset>
}
<div>@Html.ActionLink("Back to List", "Index")</div>
討論
私が知る限り、クライアントの検証を除いて、ネストされたアプローチを使用するとすべてが正常に機能します。ページのソースを見ると、スクリプト参照 (validate と validate.unobtrusive) はありますが、html に検証属性が表示されていません。ネストされたレイアウトを使用しない場合、スクリプト参照と検証属性の両方が存在します。
標準の属性ベースの検証または FluentValidation のどちらを使用しても、同じ結果が得られます。
質問
レイアウトのネスティングのやり方が間違っていますか? この 1 つの問題を除いては正常に動作しているように見えますが、標準的ではない方法で作業を行っている可能性があります。
1 レベル以上の深さでネストされたページに対してクライアント検証を機能させるために変更する必要がある web.config または他の場所に設定はありますか?
これは Microsoft に報告すべき ASP.NET MVC のバグですか?