2016-03-04 4 views
1

Я столкнулся с этой проблемой и пробовал всевозможные грани. До сих пор ничего не вышло. Это то, что у меня есть. У меня есть класс модели Student.cs.Свободные проверки в ASP. .NET MVC Application

[FluentValidation.Attributes.Validator(typeof(StudentViewModelValidator))] 
public class Student 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int StudentId { get; set; } 
    public String LastName { get; set; } 
    public String FirstName { get; set; } 
    public String UserName { get; set; } 
    public String Password { get; set; } 

    [ForeignKey("Department")] 
    public int DepartmentID { get; set; } 

    //Department Navigational Property 
    public Department Department { get; set; } 
} 

И StudentViewModel Класс:

//View Model 
public class StudentViewModel 
{ 
    public Student Student { get; set; } 

    [Display(Name = "StudentName")] 
    public String StudentFullName 
    { 
     get 
     { 
      return String.Format("{0} {1}", Student.FirstName, Student.LastName); 
     } 
    } 

    [DataType(DataType.Password)] 
    public String Password { get; set; } 

    [DataType(DataType.Password)] 
    [Compare("Password",ErrorMessage="Passwords do not match")] 
    [Display(Name="Confirm Password")] 
    public String C_Password { get; set; } 

    [Display(Name = "Department Name")] 
    public String DepartmentName { get; set; } 

} 

Класс Отдел Модель выглядит следующим образом:

public class Department 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int DepartmentID { get; set; } 

    //[Required(ErrorMessage="Department Name cannot be empty")] 
    public String DepartmentName { get; set; } 

    //[Required(ErrorMessage = "Department Code cannot be empty")] 
    public String DepartmentCode { get; set; } 

    public virtual ICollection<Student> Students { get; set; } 
} 

Правила FluentValidation выглядеть следующим образом:

public class StudentViewModelValidator : AbstractValidator<Student> 
{ 
    public StudentViewModelValidator() 
    { 
     RuleFor(m => m.FirstName) 
      .NotEmpty().WithMessage("First Name is required.") 
      .Matches(@"^\D*$").WithMessage("Special characters and numbers are not allowed in First Name"); 
     RuleFor(m => m.LastName) 
      .NotEmpty().WithMessage("Last Name is required.") 
      .Matches(@"^\D*$").WithMessage("Special characters and numbers are not allowed in Last Name"); 
     RuleFor(m => m.UserName) 
      .NotEmpty().WithMessage("User Name is required.") 
      .Matches(@"^a-zA-Z0-9\.\$").WithMessage("Only . and $ are allowed special characters in a user name"); 
     RuleFor(m => m.Password) 
      .NotEmpty().WithMessage("Password is required.") 
      .Length(4, 10).WithMessage("Password should be 4 to 10 characters long") 
      .Matches(@".*\d{2}").WithMessage("Password should contain at least 2 digits") 
      .Matches(@".*a-zA-Z").WithMessage("Password should contain at least one albhabet") 
      .Matches(@"[\.\$\~\&]").WithMessage("Allowed special characters in a password are . $ ~ &"); 

    } 
} 

Проверка продолжает ломка

Имена типов валидации в ненавязчивых правилах проверки клиента должны быть уникальными. Следующий тип проверки был рассмотрен более одного раза: regex

Password Поле.

enter image description here

The View выглядит следующим образом:

@model MvcApplication4.Models.Student 

<script src="~/Scripts/jquery-1.8.2.min.js"></script> 
<script src="~/Scripts/jquery.validate.min.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 

    @using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend><strong>Create a record</strong></legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.LastName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.LastName) 
      @Html.ValidationMessageFor(model => model.LastName) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.FirstName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.FirstName) 
      @Html.ValidationMessageFor(model => model.FirstName) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.UserName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.UserName) 
      @Html.ValidationMessageFor(model => model.UserName) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Password) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Password) 
      @Html.ValidationMessageFor(model => model.Password) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.DepartmentID) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.DepartmentID) 
      @Html.ValidationMessageFor(model => model.DepartmentID) 
     </div> 

     <p> 
      <input type="submit" class="createDetails" value="Create" /> 
     </p> 
    </fieldset> 
    } 

    <div> 
     @Html.ActionLink("Back to List", "Index") 
    </div> 

Update

Если я эти строки в Application_Start()

//var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()); 
      //ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider); 
      //DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 
      //fluentValidationModelValidatorProvider.AddImplicitRequiredValidator = false; 

Затем перерывы проверки на LastName Поле.

enter image description here

Пожалуйста, помоги мне.

+0

ли работа только один .matches в проверке пароля? – Duston

+0

Нет, это не так. Он по-прежнему показывает ошибку в LastName. Когда я прокомментирую этот блок кода для LastName из FluentValidator, он показывает ошибку для FirstName. – StrugglingCoder

ответ

1

Эта проблема может быть из-за множественное число значения устанавливаются для одной из ключевых

Как ValidatonMessage типа словаря.

Удалите всю аннотацию украшения/данных на модели viewmodel и используйте fluentvalidator, чтобы она работала.

Пожалуйста, обратитесь к

Validation type names in unobtrusive client validation rules must be unique

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