1

меня ViewModel как этотValidate первый элемент в списке

public class MyViewModel 
{ 
    public List<string> SubSiteNames { get; set; } 
} 

В связи я это сделать

@for (int i = 1; i <= 3; i++) 
    { 
     <label>Name </label> 
     @Html.TextBoxFor(m => m.SubSiteNames[i - 1]) 
    } 

Проблема с validation.I нужно, что первый элемент будет required.How можно достичь Это?

Примечание:

Я хочу, чтобы предоставить пользователю Validation.When нажмите на кнопку отправить, сообщение «требуется имя» будет показан на первом текстовом поле

ответ

1

Вы можете написать CustomDataAnnotation для List в не первый элемент null

public class MustHaveFirstElementAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     var list = value as IList; 
     if (list != null) 
     { 
      return list[0] != null; 
     } 
     return false; 
    } 
} 

     [MustHaveFirstElementAttribute (ErrorMessage = "First Element is required")] 
     public List<YourClass> SubSiteNames{ get; private set; } 

Если и хотите сделать это с JQuery

@for (int i = 1; i <= 3; i++) 
    { 
     <label>Name </label> 
     @Html.TextBoxFor(m => m.SubSiteNames[i - 1],new { id="site"+i.ToString()}) 
    } 

Тогда на представить в JQuery

$("#submit").click(function(e){ 

    if($("site1").val()=="") 
     { 
     alert("Invalid"); 
     e.preventDefault(); 
     } 
}); 
+0

Я не понимаю, что вы ответили. Мне нужно, чтобы в коллекции SubSiteNames сначала потребовалось только – cosset

+0

, а затем просто используйте FirstOrDefault() или First() и проверьте, является ли его null или нет. –

+0

Я хочу предоставить подтверждение. Когда пользователь нажмет кнопку Отправить , появляется сообщение «Имя требуется» для первого текстового поля – cosset

0

Это немного сложно сделать только первый элемент в сборе необходимой. Я предлагаю вам создать отдельное свойство для этого и пометить его как требуется:

ViewModel

public class MyViewModel 
{ 
    [Required] 
    public string RequiredName { get; set; } 
    public List<string> SubSiteNames { get; set; } 
} 

Просмотр

<label>Name </label> 
@Html.TextBoxFor(m => m.RequiredName) 
@Html.ValidationMessageFor(m => m.RequiredName) 
@for (int i = 1; i <= 3; i++) 
{ 
    <label>Name </label> 
    @Html.TextBoxFor(m => m.SubSiteNames[i - 1]) 
} 

Затем просто удалить первый элемент из SubSiteNames и установите его на RequiredName.

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