Вот моя исходная страница создания (без вложения) — проверка клиента работает
@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.
Вопросы
Есть ли что-то неправильное в том, как я делаю вложение макета? Вроде работает нормально, за исключением одной проблемы, но, возможно, я делаю что-то нестандартным образом.
Есть ли параметр в web.config или где-то еще, который мне нужно изменить, чтобы проверка клиента работала для страниц, вложенных более чем на один уровень?
Является ли это ошибкой в ASP.NET MVC, о которой я должен сообщить в Microsoft?