2016-06-16 3 views
-1

У меня есть 3 обязательных поля на моей странице и 2 из них скрыты. Значения скрытых полей заполняются jQuery на основе выбора выпадающих списков. Если я просто оставлю все пустое, чтобы ни одно из полей не было заполнено и не нажало кнопку отправки, @Html.ValidationSummery() перечисляет только ошибку для 1 видимого поля. Как я могу заставить его показывать ошибки, когда скрытые поля также не имеют значения?Проверка ASP.Net не для скрытых файлов

Код для моих скрытых полей:

<li> 
    <label for="SelectedProjects">Selected Projects:</label> 
    <select size="1" id="SelectedProjects" name="SelectedProjects" multiple="multiple"></select> <button class="removeButton" data-codetype="Project" type="button">-</button> 
    @Html.EditorFor(m => m.SelectedProjectCodes) 
</li> 

<li> 
    <label for="SelectedTasks">Selected Tasks:</label> 
    <select size="1" multiple="multiple" id="SelectedTasks" name="SelectedTasks"></select> <button class="removeButton" data-codetype="Task" type="button">-</button> 
    @Html.EditorFor(m => m.SelectedTaskCodes) 
</li> 

HTML-визуализации:

 <li> 
      <label for="SelectedProjects">Selected Projects:</label> 
      <select size="1" id="SelectedProjects" name="SelectedProjects" multiple="multiple"></select> <button class="removeButton" data-codetype="Project" type="button">-</button> 
      <input data-val="true" data-val-required="The SelectedProjectCodes field is required." id="SelectedProjectCodes" name="SelectedProjectCodes" type="hidden" value="" /> 
     </li> 

     <li> 
      <label for="SelectedTasks">Selected Tasks:</label> 
      <select size="1" multiple="multiple" id="SelectedTasks" name="SelectedTasks"></select> <button class="removeButton" data-codetype="Task" type="button">-</button> 
      <input data-val="true" data-val-required="The SelectedTaskCodes field is required." id="SelectedTaskCodes" name="SelectedTaskCodes" type="hidden" value="" /> 
     </li> 

свойства в ViewModel поддерживает его:

[HiddenInput(DisplayValue = false), Required] 
public string SelectedProjectCodes { get; set; } 

[HiddenInput(DisplayValue = false), Required] 
public string SelectedTaskCodes { get; set; } 
+1

Это дизайн. Нет смысла уведомлять пользователя об ошибке в поле, которое они не могут редактировать. Если вы хотите, чтобы поле было проверено, это должно быть нормальное текстовое поле или такое, которое пользователь мог бы контролировать. В противном случае это зависит от вашего приложения, чтобы обеспечить его ценность без привлечения пользователя. –

+0

@ChrisPratt Я не согласен, файл используется для отслеживания нескольких параметров, которые выбирают пользователи, поэтому есть смысл уведомлять пользователя об ошибке, когда скрытое поле пустое, поскольку это указывает, что они не сделали один или несколько выборов. Я также полагал, что это было по дизайну, но у большинства поведения есть способ переопределить дизайн по умолчанию, и знание того, как это сделать, будет полезно для меня и, возможно, для других. – Matthew

+1

Нет. Если пользователю не удалось выполнить другие выборы, тогда ошибка должна быть на * других выборках *, а не на скрытом поле. –

ответ

1

По валидации Jquery по умолчанию (это то, что использует MVC) игнорирует скрытые поля. Вы можете настроить это, изменив настройку по умолчанию при загрузке страницы. Одним из способов может быть добавление класса в скрытые поля, чтобы заставить их быть проверенными.

<li> 
    <label for="SelectedProjects">Selected Projects:</label> 
    <select size="1" id="SelectedProjects" name="SelectedProjects" multiple="multiple"></select> <button class="removeButton" data-codetype="Project" type="button">-</button> 
    <input class="force-validation" data-val="true" data-val-required="The SelectedProjectCodes field is required." id="SelectedProjectCodes" name="SelectedProjectCodes" type="hidden" value=""/> 
</li> 

Javacript изменить значения по умолчанию будет выглядеть следующим образом

jQuery.validator.setDefaults({ 
    ignore: ":hidden:not(.force-validation)" 
}); 
+0

Спасибо, это сработало отлично. – Matthew