У меня есть случай, когда сложное частичное представление требует различной проверки полей в зависимости от того, где используется частичное представление.
Я думал, что смогу обойти это, заставив частичное представление использовать интерфейс в качестве типа модели и реализовав две разные модели представления на основе интерфейса. Аннотации данных в двух ViewModels будут разными. Затем я бы предоставил экземпляр правильной ViewModel для частичного представления.
Но я обнаружил, что распознаются только те аннотации, которые находятся на самом интерфейсе. DA в классах ViewModel, реализующих интерфейс, игнорируются, даже если это объекты, которые передаются как модели. Так что мой план не работает.
Есть ли способ обойти это? Лучший подход? Я бы предпочел не разбивать частичное представление на отдельные представления, если я могу этого избежать.
ETA: Это сокращенная версия частичного представления, как и требовалось:
@model IPerson
@Html.ValidationSummary(false)
<fieldset>
<table class="editForm">
<tr>
<td class="editor-label">
@Html.LabelFor(model => model.FirstName)
</td>
<td class="editor-field">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</td>
<td class="editor-label">
@Html.LabelFor(model => model.LastName)
</td>
<td class="editor-field">
@Html.EditorFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</td>
</tr>
</table>
<fieldset>
Настоящее частичное представление довольно длинное и содержит множество операторов @if, управляющих рендерингом (или нет) необязательных разделов, но не не делай ничего хитрого.