有没有一种方法可以使数据注释成为条件?我有一个表Party
,用于存储组织和人员。如果要添加组织,则不希望字段姓氏为必填项,仅当我要添加人员时。
public class Party
{
[Required(ErrorMessage = "{0} is missing")]
[DisplayName("Your surname")]
public object surname { get; set; }
[DisplayName("Type")]
public object party_type { get; set; }
...
}
我想要一个必要的姓氏数据注释条件,例如:
if (party_type=='P')
然后需要姓,否则姓可以为空。编辑
如果我必须将此验证移到 Controller 上,该怎么办?如何从那里触发相同的错误消息?
最佳答案
您可以使模型继承自IValidatableObject,然后将自定义逻辑放入Validate方法中。您还必须从属性中删除RequredAttribute。您将必须编写一些自定义JavaScript来在客户端上验证此规则,因为Validate方法不会转换为不干扰用户的验证框架。注意我将您的属性更改为字符串以避免转换。
另外,如果您还有其他来自属性的验证错误,则这些错误将首先触发并阻止Validate方法的运行,因此,只有在基于属性的验证正常的情况下,您才可以检测到这些错误。
public class Party : IValidatableObject
{
[DisplayName("Your surname")]
public string surname { get; set; }
[DisplayName("Type")]
public string party_type { get; set; }
...
public IEnumerable<ValidationResult> Validate( ValidationContext context )
{
if (party_type == "P" && string.IsNullOrWhitespace(surname))
{
yield return new ValidationResult("Surname is required unless the party is for an organization" );
}
}
}
在客户端上,您可以执行以下操作:
<script type="text/javascript">
$(function() {
var validator = $('form').validate();
validator.rules('add', {
'surname': {
required: {
depends: function(element) {
return $('[name=party_type]').val() == 'P';
}
},
messages: {
required: 'Surname is required unless the party is for an organization.'
}
}
});
});
</script>
关于asp.net-mvc - 条件数据注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6453560/