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>
これはドロップダウンリストのアイテムコードです。このようにして、他のアプリケーションで使用して、複数の場所ではなく1つの場所で変更できるようにしています。
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">
クライアント側の検証を最初から機能させるにはどうすればよいですか?必要な属性やエラーメッセージを手動で追加する必要はありません。データアノテーションを使用する目的が損なわれるためです。