私はASP.NETコアの検証のベストプラクティスに従おうとしています。私はビューモデルにバインドされたページを持つ連絡フォームを持っています。データアノテーションを使用してSelectListオブジェクトへのドロップダウンバインドを検証する
モデル
public class ViewModel {
...
[Required(ErrorMessage = "Select a city")]
public int CityID { get; set; }
public SelectList CityList { get; set; }
}
ビュー
<select id="input-request-type" class="form-control" asp-for="CityID" asp-items="@Model.CityList">
<option value="" hidden disabled selected>Select a city</option>
</select>
<span asp-validation-for="CityID"></span>
これは、HTMLでのこのようなものに変換します。
<select class="input-validation-error" data-val="true" data-val-required="Select a city" name="CityID">
<option value="" hidden="" disabled="" selected="">Select a city</option>
<option value="9">Toronto</option>
<option value="12">New York</option>
</select>
上記のコードに問題がVALIDAということですエラーが発生することはありません。私の推測では、たとえそれが空文字列であっても、依頼は依然としてバリデーションによって値が検出されます。
私が試した何:
が、私はそうのようなモデルにデータ注釈を修正してみました:
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
...
[BindRequired]
public int CityID { get; set; }
public SelectList CityList { get; set; }
これは、検証エラーを示しているが、それはName is required
を示しています。これは、利用可能な最初の検証エラーを拾うが、私が望んでいない、非常にどのようなので、私は次のようにそれを変更:
...
[BindRequired]
[Required(ErrorMessage = "Select a city")]
public int CityID { get; set; }
public SelectList CityList { get; set; }
これは、エラーを示していますが、それは完全に私が欲しいのエラーメッセージを無視します。出力はA value for the 'CityID' property was not provided.
私は欲しいエラーメッセージを正しく表示する方法についてのアイデアはありますか?私はこの問題に関する文書を見つけることができないようです。