asp.net MVC DataAnnotations

时间:2010-12-02 06:42:42

标签: asp.net-mvc

请问你是否无法理解我在问什么。

我已为我的ViewModel

创建了自定义ValidateAttribute

我为验证属性创建了它,这些属性依赖于ViewModel的另一个属性

if(用户从QrupList检查“01”或“09”)然后

  1. 需要公司名称
  2. 不需要姓名,姓氏和姓氏
  3. 其他

    1. 不需要公司名称
    2. 需要姓名,姓氏和姓氏
    3. 我有ViewModel,如下所示

      [ValidateForGroupAttribute("Group", "CompanyName")]
      public partial class AbonentViewModel
      {      
          [DisplayName("Şirkət")]
          public string CompanyName { get; set; }
      
          [DisplayName("Soyadı")]
          [Required(ErrorMessage = "Soyadı vacibdir")]
          public string Surname { get; set; }      
      
          [DisplayName("Qrup")]
          [Required(ErrorMessage = "Qrup vacibdir")]
          public string Group{ get; set; }
      
          public SelectList GroupList { get; set; }
      }
      

      我的自定义ValidationAttribute课程:

      [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
      public sealed class ValidateForGroupAttribute : ValidationAttribute
      {
          private const string _defaultErrorMessage = "'{0}' a müvafiq '{1}' daxil din";
      
          public ValidateForGroupAttribute(string originalProperty, string confirmPropertyCompany)
              : base(_defaultErrorMessage)
          {
              OriginalProperty = originalProperty;
              ConfirmPropertyCompany = confirmPropertyCompany;
          }
      
          public string OriginalProperty { get; private set; }
      
          public override string FormatErrorMessage(string name)
          {
              return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
                  OriginalProperty, ConfirmPropertyCompany);
          }
      
          public override bool IsValid(object value)
          {
              PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
              object originalValue = properties.Find(OriginalProperty, true).GetValue(value);
              object confirmValueCompany = properties.Find(ConfirmPropertyCompany, true).GetValue(value);
      
              if ((string)originalValue == "01" || (string)originalValue == "09")
                  return false;
              else
                  return true;
          }
      }
      

      我该怎么办?我的ValidationAttribute s有什么问题?

1 个答案:

答案 0 :(得分:2)

我们在几个月前使用数据注释查看验证,并决定使用类似流畅验证的方法更好,因为我们有复杂的业务规则和逻辑,这些都需要花费太多精力来实现数据注释。看看文档,您将看到流畅的验证使这样的事情变得容易。

抱歉,我没有早点回复:Check fluent validation here

你的规则可能看起来像。语法没有经过测试,但我相信你能够搞清楚。

public class AbonentViewModelValidator : AbstractValidator<AbonentViewModel> {
    public AbonentViewModelValidator() {
        RuleFor(model => model.CompanyName).NotEmpty().When(model => (model.GroupList.Id == 1 || model.GroupList.Id == 9 ));
        RuleFor(model => model.Surname).NotEmpty().When(model => (model.GroupList.Id != 1 || model.GroupList.Id != 9 ));
        RuleFor(model => model.Name).NotEmpty().When(model => (model.GroupList.Id != 1 || model.GroupList.Id != 9 ));
    }
}