私はmvc 5を使用しています。ORMを使用してデータベースからデータをロードし、このようにコントローラーからドロップダウンリストに入力します。
ViewBag.Country_id = new SelectList(_db.Countries, "Country_id", "Description");
最初に空のフィールドが必要だったので、HTMLでこれを実行しています。
<div class="form-group">
@Html.LabelFor(model => model.Countries, "Country", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("Country_id", null, htmlAttributes: new { @class = "form-control" }, optionLabel: "Choose a Country")
@Html.ValidationMessageFor(model => model.Country_id, "", new { @class = "text-danger" })
</div>
</div>
空の選択肢の値は「0」です。
そして、ユーザーが国を選択することを検証したかったので、この検証を追加します
[Required,Range(1, int.MaxValue, ErrorMessage = "Error: Must Choose a Country")]
public int Country_id { get; set; }
問題は、エラーが発生しないことです。常に「0」であり、検証は行われませんでした。
何が欠けていますか?
まず、使用しているDropDownList()
のオーバーロードを使用してクライアント側の検証を取得することはできません。バインディングするプロパティとSelectList
には別の名前を使用する必要があります。コントローラのコードを(たとえば)に変更します。
_ViewBag.CountryList = new SelectList(_db.Countries, "Country_id", "Description");
_
そして、モデルプロパティ属性を(RangeAttribute
を削除して)に変更します。
_ [Required(ErrorMessage = "Error: Must Choose a Country")]
public int Country_id { get; set; }
_
次に、ビューでnull
ラベルオプションを生成するオーバーロードを使用します
_@Html.DropDownListFor(m => m.Country_id, (SelectList)ViewBag.CountryList, "Choose a Country", new { @class = "form-control" })
_
ユーザーが最初の( "国の選択")オプションを選択してフォームを送信すると、検証エラーが表示されます。
補足:ViewBag
ではなく_public IEnumerable<SelectListItem> CountryList { get; set; }
_プロパティを持つビューモデルを使用することをお勧めします(ビューは@Html.DropDownListFor(m => m.Country_id, Model.CountryList, "Choose a Country", new { @class = "form-control" })
になります)
。net coreの場合、@Html.ValidationMessageFor(...
の代わり
使用する
かみそりcshtml
<span asp-validation-for="SelectedCountryId" class="text-danger"></span>
モデルpoco
[Required(ErrorMessage = "Country is required.")]
public int SelectedCountryId { get; set; }
モデルクラス
[Display(Name = "Program")]
[Required, Range(1, int.MaxValue, ErrorMessage = "Select Program")]
public string Programid { get; set;
見る
@Html.DropDownListFor(Model=>Model.Programid,(IEnumerable<SelectListItem>)ViewBag.Program, new {@id = "ddlProgram"})