1

У меня есть следующий вызов:Ненавязчивый прослушивают, когда массив участвует

@Html.TextBoxFor(m => m.SelectedName) 
    @Html.TextBoxFor(m => m.Selections[0].Name) 

В обоих случаях я теге SelectedName и Name соответственно со следующими примечаниями

[Required(ErrorMessage = "Please provide required value")] 

Однако SelectedName печатает правильно ненавязчивые атрибуты html:

<input id="SelectedName" name="SelectedName" data-val="true" data-val-required="Please provide required value"> 

Где в качестве m.Selections [0]. Отображать следующее:

<input id="Selections_0__Name" name="Selections[0].Name" value="" type="text"> 

Что дает? Я не могу поверить, что этот сценарий был пропущен в MVC4, это похоже на довольно распространенный случай использования. Как я могу проверить модель представления, которая является массивом или содержит массив?

===================== EDIT добавление кода для ViewModels для ясности ================= ====

public class ContainerVM 
{ 
    [Required] 
    public string SelectedName {get;set;} 
    public MemberVM[] Selections {get;set;} 
} 

public class MemberVM 
{ 
    [Required] 
    public string Name { get;set; } 
} 

===================== Формы ================= ===

@using MyProject.Models; 
@model ContainerVM 
@{ 
    ViewContext.FormContext = new FormContext(); //This is just a hack because the parent isn't defined yet. 
} 

     @Html.TextBoxFor(m => m.SelectedCptGroupId) 
     @Html.TextBoxFor(m => m.CptGroupSelections[0].Name) 
+0

пожалуйста, поделитесь своей декларацией для выбранных параметров, а также аннотация –

+0

Так что, может быть, я не понял. Вы не аннотировали массив? –

+0

OIC, да, член ** (имя) массива Требуется модель! ** –

ответ

2

стесняется нажать ответ, прежде чем больше обратной связи, но

[required] аннотации не может быть применены к массивам или сложным объектам.

Вы можете применить аннотацию [required] для определенных элементов класса или даже члена вложенного класса.

Очевидно, что мы все знаем, что мы можем аннотировать классический

[required] 
public string SelectedName {get; set;} 

и это должно работать. Я не могу говорить об этом.

Но, наоборот аннотацию на массив строк

[required] 
public string[] SelectedName {get;set;} 

потерпит неудачу., для этого вам нужно будет аннотировать каждый элемент Модели.

так же, если мы пытались аннотирования вложенной модели с членами [требуется] общественный SelectionsModel Выбора {получить, установить;}

это тоже потерпит неудачу.

хуже всего, это выглядит, как вы пытаетесь аннотировать множество моделей [требуется] общественного SelectionsModel Selections [] {получить; набор;}

и это опять-таки не удастся.


Что должно работать (хотя я не пробовал):

Annotate каждый элемент из вложенных друг в друга Подборки модели.

Тогда каждый элемент каждой модели массива должен требовать ввода.

public class SelectionsModel 
    { 
     [required] 
     public string name {get; set;} 
     [required] 
     public int age { get; set; } 

    } 
+0

Дэйв, я уже делаю это позже. Я аннотирую каждый элемент массива. И это неудачно. – Alwyn

+0

@Alwyn: Krp. Пожалуйста, поделитесь своей модельной декларацией и аннотацией. Может быть, мы сможем разыскать некоторых ickies. –

+0

Дэйв, я изменил вопрос, спасибо за ответ! – Alwyn

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