0

DropDownListForで作成された選択リストに対してクライアント側の検証をトリガーする方法はありますか?ヘルパーによって作成された選択リストは、クライアント側の検証のためにテキスト入力が取得する "データval"または "データval-required"属性を取得していないようです。ASP.net MVC3 DropDownListFor int必須DataAnnotation

検証はModelState.IsValidをチェックするとサーバー側で行われ、検証メッセージは後続のページの読み込み時に表示されます。

ユーザーがオプションを選択する必要があるため(リストの最初の項目を選択するのではなく)、デフォルトで「Please Select ...」を設定しました。

マイビューモデル:ビューで

public partial class ProvinceVM 
{ 
    [Required] 
    [Range(1, int.MaxValue)] 
    public int CountryId { get; set; } 
    [Required] 
    [StringLength(16)] 
    public string Abbreviation { get; set; } 
    [Required] 
    [StringLength(64)] 
    public string Name { get; set; } 
} 

コード:

<div class="editor-label"> 
    @Html.LabelFor(model => model.CountryId, "Country") 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(model => model.CountryId, (IEnumerable<SelectListItem>)ViewBag.CountryId, "Please Select...") 
    @Html.ValidationMessageFor(model => model.CountryId) 
</div> 

そして、私のコントローラコード:私はすでに試した

[HttpPost] 
public ActionResult Create(ProvinceEditVM provinceVM) 
{ 
    if (ModelState.IsValid) 
    { 
     var province = new Province() { CountryId = provinceVM.CountryId.Value, Abbreviation = provinceVM.Abbreviation, Name = provinceVM.Name }; 
     _repo.Add<Province>(province); 
     _repo.SaveChanges(); 
     return RedirectToAction("index"); 
    } 
    ViewBag.CountryId = new SelectList(_repo.GetQuery<Country>().OrderBy(x => x.Name), "CountryId", "Name", provinceVM.CountryId); 
    return View(provinceVM); 
} 

もの:

  • 何か他のものにViewBag.CountryIdの名前を変更CountryIdプロパティ
  • の範囲は属性を削除
  • NULL可能int型(int型?)ビューモデルのCountryIdプロパティを作る(場合に表示モデルのプロパティ名といくつかの競合がありました)

私はjQueryを使用して必要な値を簡単に作成できますが、私は既に組み込まれているものを見落とさないようにしたいと思います。特に私はローカライズされたカルチャエラーメッセージを追加したいと思っています。

答えて

1

のための添付のzipファイルで

ルックは、実際に私は私の記事の最後に述べた3つのすべてのものの組み合わせを行うことによって、それは動作させることができました。 View Modelのプロパティをnullにする必要があり、ViewBage.CountryIdの名前を別のものに変更する必要がありました(名前をCountryListに変更しました)。

私のProvinceVMにSelectListプロパティを追加してViewBagからそれを取得すると、突然data-val *属性がリストに表示されていました。

1

これは、ドロップダウンリストの邪魔にならない検証のバグです。 MVC 3 RTMは、ドロップダウンリストのコレクションの目立たない検証を作成しません。 http://aspnet.codeplex.com/workitem/7629を参照してください。問題は、邪魔にならない検証を構築するコードが、WITHOUTというメタデータへの参照を呼び出し、null値を返すことです。ソリューションは、DropDownListFor用の独自のHtmlHelperを構築することです。回避策

+0

これを指摘してくれてありがとう。 – Sam

関連する問題