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

标签 asp.net-mvc validation data-annotations

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

相关文章:

javascript - Kendo UI - Javascript 事件处理程序(代码分离 + 参数)

validation - 在 Go 中使用 unicode 包进行验证?

javascript - 在接收月份的文本框中输入验证

asp.net-mvc - DataAnnotations DataType 属性中的 ErrorMessage 被忽略

.net - 字段由同一属性多次注释

c# - 系统.BadImageFormatException : Could not load file or assembly- Exception only on hosting server?

jQuery 回调发生得太快?

javascript - 使用 Asp.Net MVC 删除 javascript 中硬编码字符串的最佳方法

javascript - 是否有任何非常简单的 JQuery 验证?

asp.net-mvc-3 - ASP.NET MVC PartialView 不发出验证标记