2

考虑这个模型类:

public class FooModel {
     public Person Manager { get; set; }
     public Person Employee { get; set; }
}

public class Person {
     [Required]
     public String Name { get; set; }
}

如果用户Name在表单中为经理提供了一个值,而不是为员工提供了一个值,那么ValidationSummary()将返回消息“需要姓名”而不进一步限定它(即不清楚Employee.Name是否未设置但Manager.Name已设置)。

这个问题有什么解决方案?

4

1 回答 1

0

这里的问题:(如何在 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")); } } }

于 2012-09-06T23:44:53.193 回答