2014-02-19 2 views
1

Я использую Asp.net MVC 4 и .NET 4.5. У меня есть представление, где в режиме редактирования отображаются имя класса, имя учителя класса и список учащихся этого класса. Мой главный вид выглядитПроверка модели не появляется в asp.net mvc

public class Class 
{ 
    public int ClassId { get; set; } 

    public string ClassName { get; set; } 

    public string ClassTeacherName { get; set; } 

    [RequiredInList(FieldName = "LastName", ErrorMessageResourceType = typeof(ErrorMessagesResource), ErrorMessageResourceName = "Required")] 
    public List<Student> Students { get; set; } 
} 

где я студент, как

public partial class Student 
{ 
    public int StudentID { get; set; } 

    public string LastName { get; set; } 

    public string FirstMidName { get; set; } 

    public System.DateTime EnrollmentDate { get; set; } 

    public decimal RollNo { get; set; } 
} 

и мой пользовательский атрибут как

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = true)] 
public class RequiredInListAttribute : RequiredAttribute 
{ 
    /// <summary> 
    /// Gets or sets the name. 
    /// </summary> 
    public string FieldName { get; set; } 

    /// <summary> 
    /// The is valid. 
    /// </summary> 
    /// <param name="value"> 
    /// The value. 
    /// </param> 
    /// <param name="validationContext"> 
    /// The validation context. 
    /// </param> 
    /// <returns> 
    /// The <see cref="ValidationResult"/>. 
    /// </returns> 
    /// <exception cref="InvalidOperationException"> 
    /// Invalid operation exception 
    /// </exception> 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     var val = value as IEnumerable; 
     if (value == null || val == null) 
     { 
      throw new InvalidOperationException("This attribute Required In List is intended to use only on list"); 
     } 

     var isInvalidFiled = 
      (val.Cast<object>().Select(v => v.GetType().GetProperty(this.FieldName).GetValue(v, null))).Any(
       property => property == null); 

     return !isInvalidFiled 
        ? ValidationResult.Success 
        : new ValidationResult(string.Format(this.ErrorMessageString, "Last Name"), new[]{"Students[0].LastName"}); 
    } 
} 

теперь моя проблема после отправки формы, даже если фамилия не предоставляется, ошибки не возникает.

+0

... и отладки этот код говорит вам что? Каково значение 'isInvalidField' во время отладки? –

+0

Значение isInvalidField подходит как True. поэтому должно быть добавлено идеальное сообщение о достоверности. но он не отображается в поле зрения – hajirazin

+0

Сообщение о проверке, которое должно быть добавлено на стороне клиента или на стороне сервера? –

ответ

0

Put это на странице CSHTML:

@Html.ValidationSummary() 

Вы можете также использовать что-то вроде этого после каждого поля в cshtml:

@Html.ValidationMessageFor(model => model.StudentID) 
+0

не работает на собственность Студенты. – hajirazin

+0

Почему вы не редактируете свой вопрос и не добавляете файл CSHTML? Это поможет. –

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