2017-02-15 7 views
0

私は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.

私は欲しいエラーメッセージを正しく表示する方法についてのアイデアはありますか?私はこの問題に関する文書を見つけることができないようです。

答えて

0

ビュー自体のメッセージを上書きできるようです。

モデル

[BindRequired] 
public int CityID { get; set; } 
public SelectList CityList { get; set; } 

ビュー

<style> 
    .field-validation-valid { 
     display: none; 
    } 
</style> 

<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">Select a city</span> 

は、検証のためのspan要素は、値が有効であるかどうかによって、次のように変身:

// valid 
<span class="field-validation-valid" data-valmsg-for="CityID" data-valmsg-replace="true"> 
    Select a city 
</span> 

// invalid 
<span class="field-validation-error text-danger" data-valmsg-for="CityID" data-valmsg-replace="true"> 
    Select a city 
</span> 
関連する問題