我有一种情况,复杂的局部视图需要根据部分视图的使用位置进行不同的字段验证.
我认为我可以通过使局部视图将接口作为模型类型并基于接口实现两个不同的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>
真正的局部视图很长,有很多@if语句管理可选部分的渲染(或不渲染),但它没有做任何棘手的事情.
解决方法
我的想法不会起作用:
this thread提醒我,类不会从其接口继承属性. (正如答案所指出的,如果两个接口使用不同的属性指定相同的属性,并且两个接口都由一个类实现,会发生什么?)
它可能适用于公共基类.我明天会试试.
谢谢大家.