2010-12-02 4 views
1

Пожалуйста, спросите, не можете ли вы понять, что я прошу.asp.net MVC DataAnnotations

Я создал обычай ValidateAttribute для моего ViewModel

я создал его для свойств Validate, которые зависят от другого свойства ViewModel

если (пользователь проверил «01» или «09» от QrupList) Тогда

  1. название компании требуется
  2. имя, фамилия и LastName не нужны

еще

  1. Название компании не требуется
  2. Имя, фамилия и LastName необходимы

меня 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?

+0

спасибо jgauffin. У меня проблема с английским – AEMLoviji 2010-12-02 07:49:32

ответ

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)); 
    } 
} 
+0

Можете ли вы дать мне ссылку на документацию? – AEMLoviji 2010-12-02 08:32:00

Смежные вопросы