我遇到的情况是,复杂的局部视图需要根据局部视图的使用位置进行不同的字段验证。
我认为我可以通过使分部视图采用接口作为模型类型并基于该接口实现两个不同的 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 语句来管理可选部分的渲染(或不渲染),但它没有做任何棘手的事情。
我的想法行不通:这个线程提醒我类不会从其接口继承属性。 (正如答案所指出的,如果两个接口指定具有不同属性的相同属性,并且两者都由一个类实现,会发生什么?)
它可能与公共基类一起使用。明天我会尝试一下。
谢谢大家。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)