gpt4 book ai didi

asp.net-mvc - 条件数据注释

转载 作者:行者123 更新时间:2023-12-03 11:51:49 25 4
gpt4 key购买 nike

有没有一种方法可以使数据注释成为条件?我有一个表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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com