我正在尝试对 select 元素使用客户端验证,但在表单最初加载时它不起作用。
这是我的模型中的属性(这实际上是在我的模型中的一个类中):
[Required(ErrorMessage="Please select an application type.")]
public override string Application
{
get
{
return base.Application;
}
set
{
base.Application = value;
}
}
这是视图的一部分
<div class="field_title">
Application Type
</div>
<div class="field_validation">
@Html.ValidationMessageFor(model => model.CreatePromocode.Application)
</div>
<div class="form_field">
@Html.DropDownListFor(model => model.CreatePromocode.Application,
SharedLibrary.Entities.DropDownLists.PromocodeApplicationOptions,
"Select an application type...")
</div>
这是下拉列表项代码,我这样做是为了在其他应用程序上使用它,只需在一个地方而不是几个地方进行更改
public class DropDownLists
{
public static List<SelectListItem> PromocodeApplicationOptions
{
get
{
return new List<SelectListItem>()
{
new SelectListItem() {
Text="Earlybird Registration", Value="Earlybird"},
new SelectListItem() {
Text="Standard Registration", Value="Standard"},
new SelectListItem() {
Text="Monday Registration", Value="Monday"},
new SelectListItem() {
Text="Tuesday Registration", Value="Tuesday"},
new SelectListItem() {
Text="Wednesday Registration", Value="Wednesday"},
new SelectListItem() {
Text="Multiple Tickets", Value="TicketMany"},
new SelectListItem() {
Text="Single Ticket",Value="TicketSingle"}
};
}
}
}
我遇到的问题是,当用户第一次到达页面时,下拉列表没有任何客户端验证属性。看起来像这样
<select id="CreatePromocode_Application" name="CreatePromocode.Application">
但是,一旦发布了表单,并且由于尚未选择应用程序类型而导致 ModelState 无效,客户端验证就会出现在下拉列表中并且可以正常工作。
<select data-val="true"
data-val-required="Please select an application type."
id="CreatePromocode_Application"
name="CreatePromocode.Application"
class="valid">
如何从一开始就进行客户端验证?我宁愿不必手动添加必需的属性和错误消息,因为它有点违背使用数据注释的目的。