Использование интерфейса в качестве типа модели частичного представления + аннотации данных

У меня есть случай, когда сложное частичное представление требует различной проверки полей в зависимости от того, где используется частичное представление.

Я думал, что смогу обойти это, заставив частичное представление использовать интерфейс в качестве типа модели и реализовав две разные модели представления на основе интерфейса. Аннотации данных в двух 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, управляющих рендерингом (или нет) необязательных разделов, но не не делай ничего хитрого.

8
задан John Saunders 7 August 2014 в 12:19
поделиться