web-dev-qa-db-ja.com

必要な検証でASP.Net MVC DropDownListを作成する方法

私は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」であり、検証は行われませんでした。

何が欠けていますか?

4
Diego

まず、使用している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" })になります)

1
user3559349

。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; }
0
Tom Stickel

モデルクラス

        [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"})
0
Hafsal Rh