这里的问题:(如何在 MVC3 中向同一对象的实例显示不同的必需消息?)有两个答案。
第一个建议展平 ViewModel,在我的情况下,这意味着将Person
成员复制到FooModel
两次,然后我可以为两者设置自定义验证消息。出于明显的原因,我决定不这样做(我的Person
课程要复杂得多,并且也在其他地方使用)。
第二个答案建议修改 ModelState 的错误消息,这就是我所做的。我已经为 ViewModel 开发了一种方法来修改它们自己的验证,所以添加这个技巧很容易。我添加了一个 [DisplayName] 属性,如下所示(伪代码):
class FooModel : ICustomValidation {
[DisplayName("Manager")]
public Person Manager { get; set; }
[DisplayName("Employee")]
public Person Employee { get; set; }
public void HandleValidation(ModelStateDictionary modelState) {
if( modelState.IsInvalidByPrefix("Manager") ) {
modelState.AppendErrorMessageDisplayPrefix( GetLocalisedDisplayName("Manager") );
}
if(modelState.IsInvalidByPrefix("Employee")) { modelState.AppendErrorMessageDisplayPrefix(GetLocalisedDisplayName("Employee")); } } }