Учитывая этот код моделивалидация применяется только к первому элементу массива
[Required]
[Display(Name = "Name")]
public string Name { get; set; }
следующий вид код работает
@Html.LabelFor(model => model.Name)
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
Всякий раз, когда я оставляю Name
поле пустым, TextBox
подсвечивается красный, и появляется сообщение об ошибке "The Name field is required."
, что хорошо.
Однако моя модель также содержит Option[] Options
, которые также должны быть проверены.
Учитывая этот код модели
private const string orderNoDisplayName = "Order number";
[Required]
[RegularExpression(@"\d+",
ErrorMessage = "The " + orderNoDisplayName + " field must be numeric.")]
[Display(Name = orderNoDisplayName)]
public string OrderNo { get; set; }
следующий вид кода не совсем работа, как ожидается,
@foreach (var option in Option.GetDefaultOptions())
{
<li>
@Html.TextBoxFor(model => option.OrderNo, new { id = option.IdString })
@Html.ValidationMessageFor(model => option.OrderNo,
null, new { data_valmsg_for = option.IdString })
</li>
}
Самые первые option
работает отлично, но любой последующий option
нет.
Ниже автоматически генерируется код 2 option
s
<ul>
<li> <!-- automatically generated code for 'option_1' -->
<input data-val="true" data-val-regex="The Order number field must be numeric."
data-val-regex-pattern="\d+" data-val-required="The Order number field is required."
id="option_1" name="OrderNo" type="text" value="0" class="input-validation-error">
<span class="field-validation-valid" data-valmsg-for="option_1"
data-valmsg-replace="true"></span>
</li>
<li> <!-- automatically generated code for 'option_2' -->
<input id="option_2" name="OrderNo" type="text" value="0"
class="input-validation-error">
<span class="field-validation-valid" data-valmsg-for="option_2"
data-valmsg-replace="true"></span>
</li>
</ul>
Так, очевидно, MVC не добавить любые проверки атрибутов моей второй option
или последующих option
с на всех.
Конечно, я мог бы жестко скопировать проверки в рукописный текст <input>
, но я бы хотел, чтобы этого не делалось. Что я могу сделать, чтобы сделать валидацию для всех option
s, а не только первой?
что же автогенерируемая входы выглядеть? Похоже, что из кода все ваши входы идентичны. Это было бы причиной того, что только первый валидирован. –
@MattBodily. Автоматически сгенерированный код уже включен (это последний блок кода), я просто добавил комментарии, чтобы было легче читать. – Nolonar