Вот моя оригинальная страница создания (без вложенности) - проверка клиента работает
@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?