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を使用して必要な値を簡単に作成できますが、私は既に組み込まれているものを見落とさないようにしたいと思います。特に私はローカライズされたカルチャエラーメッセージを追加したいと思っています。
これを指摘してくれてありがとう。 – Sam