给定这个模型代码
[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
没有。
下面是自动生成的代码 2option
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>
很明显,MVCdid not将任何验证属性添加到我的第二个option
或任何后续的option
根本没有。
当然,我可以将验证硬编码成手写的<input>
标签,但我想避免这样做。我该怎么做才能使验证适用于所有人option
s,而不仅仅是第一个?