使用接口作为部分视图+数据注释的模型类型

Ann*_* L. 8 interface partial-views data-annotations asp.net-mvc-3

我有一个案例,复杂的局部视图需要根据部分视图的使用位置进行不同的字段验证.

我认为我可以通过使局部视图将接口作为模型类型并基于接口实现两个不同的ViewModel来解决这个问题.两个ViewModel中的数据注释会有所不同.然后,我将向部分视图提供正确的ViewModel的实例.

但我发现,唯一被识别的注释是界面本身的注释.实现ViewModel类的接口上的DA被忽略,即使这些是作为模型传递的对象.所以我的计划不起作用.

有没有解决的办法?更好的方法?如果可以避免,我宁愿不将局部视图拆分为单独的视图.

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>
Run Code Online (Sandbox Code Playgroud)

真正的局部视图很长,有很多@if语句管理可选部分的渲染(或不渲染),但它没有做任何棘手的事情.

Ann*_* L. 3

我的想法行不通: 这个线程提醒我,类不会从其接口继承属性。(正如答案所指出的,如果两个接口指定具有不同属性的相同属性,并且两者都由一个类实现,会发生什么?)

它可能与公共基类一起使用。明天我会尝试一下。

谢谢大家。