考虑这个模型类:
public class FooModel {
public Person Manager { get; set; }
public Person Employee { get; set; }
}
public class Person {
[Required]
public String Name { get; set; }
}
如果用户在Manager的表单中提供Name
值而不是Employee,那么ValidationSummary()
将返回消息“Name is required”而不进一步限定它(即它不是清楚Employee.Name
未设置,Manager.Name
是。)
这个问题有什么解决方案?
答案 0 :(得分:0)
这里的问题:( How do I show a different Required message to instances of the same object in MVC3?)有两个答案。
第一个建议展平ViewModel,在我的情况下,这意味着将Person
成员复制到FooModel
两次,然后我可以为两者设置自定义验证消息。我出于显而易见的原因决定反对这一点(我的Person
类相当复杂,并且在其他地方使用过。)
第二个答案建议修改ModelState的错误消息,这就是我所做的。我已经为ViewModels开发了一种修改自己验证的方法,所以添加这个技巧很容易。我添加了一个[DisplayName]属性,如此(psuedocode):
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”)); } } }