2016-12-04 21 views
1

ViewModelRoleフィールドにRequiredValidationmessageを設定しました。 dropdownlistViewModelRoleフィールドを反映していると思われます。しかし、dropdownlistから値を選択しなかった場合、そのフィールドにはすでにRequiredの検証が設定されていても、何のエラーも表示されません。理由は何ですか?ASP.NET MVC ValidationMessageがドロップダウンリストに表示されない

のViewModel:

public class RegisterViewModel 
{ 
    [Required] 
    [EmailAddress] 
    [Display(Name = "Email")] 
    public string Email { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 

    [Required(ErrorMessage = "Please select a user type")] 
    [Display(Name = "Select user type:")] 
    public string Role { get; set; } 
} 

ビュー:

<div class="form-group"> 
    @Html.LabelFor(m => m.Role, new { @class = "col-md-2 control-label"}) 
    <div class="col-md-10"> 
     @Html.DropDownList("Role", null, "Select user type", new { @class = "form-control" }) 
     @Html.ValidationMessage("Role") 
    </div> 
</div> 
+0

あなたのリクエストはコントローラのアクションに当たっていますか、お使いのモデルの状態を確認できますか? – kat1330

答えて

1

最初のパラメータはIEnumerable<SelectListItem>(すなわち時にあるときにDropDownList()のオーバーロードを使用するときは、クライアント側の検証を取得することはできませんがバインドするプロパティとしてSelectListの同じ名前を使用します)。生成したhtmlを調べると、<select>要素に対して生成された属性がdata-val-*ではないことがわかります。あなたがベストプラクティスですビューモデルを(持っているがために、コントローラで

ViewBag.RoleList = new SelectList(...); 

とビューの

@Html.DropDownList("Role", (IEnumerable<SelectListItem>),ViewBag.RoleList "Select user type", new { @class = "form-control" }) 

(例えば)を使用した場合

これは、使用して動作します)、次いでモデル

public class RegisterViewModel 
{ 
    .... 
    [Required(ErrorMessage = "Please select a user type")] 
    [Display(Name = "Select user type:")] 
    public string Role { get; set; } 
    public IEnumerable<SelectListItem> RoleList { get; set; } 
} 

とGETのメタ内にSelectListのプロパティを追加しますあなたは、ビュー

RegisterViewModel model = new RegisterViewModel() 
{ 
    RoleList = .... // your query to generate the SelectList 
}; 
return View(model); 

に、ビューにモデルを渡す使用する前にOD、コレクションを移入強くHtmlHelper方法

@Html.DropDownListFor(m => m.Role, Model.RoleList "Select user type", new { @class = "form-control" }) 
@Html.ValidationMessageFor(m => m.Role) 

はなぜ財産あなたの結合の更なる例についてもthis DotNetFiddle参照してください型付けとSelectListViewBagの名前は同じであってはいけません。

+0

私はあなたのアイデアを得ましたが、dbコンテキストから '' IEnumerable RoleList''をどのように埋め込むのか分かりません。どんな助けもありがとう! – Pow4Pow5

+0

さて、私はすでに問題を解決しました!あなたの答えをありがとう! – Pow4Pow5

関連する問題