2011-09-29 8 views
9

以下のドロップダウンリストが、必須フィールドをタイプint(以下の「タイトル」フィールド)として検証しない理由は何ですか?MVC3 DropDownListは、[必須]クラスフィールドで型intとして検証されませんか?

[Required]    // This works! 
    [Display(Name = "Name")] 
    public string Name { get; set; } 

    [Required]    // This doesn't work 
    [Display(Name = "Title")] 
    public int TitleId { get; set; } 



    <div class="editor-label"> 
     @Html.LabelFor(model => model.Name, "Name") 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Name) 
     @Html.ValidationMessageFor(model => model.Name, "This can't be blank!") 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.TitleId, "Title") 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.TitleId, (SelectList)ViewBag.TitleId, String.Empty) 
     @Html.ValidationMessageFor(model => model.TitleId) 
    </div> 

enter image description here

+0

あなたのデータを投稿し、値が割り当てられているTitleIdのでしょうか? –

+0

intの場合は?それでもまだ動作していない場合、おそらくドロップダウンのデフォルト値を設定しますか?すなわち:(0、 "すべてのレコード")の代わりにnull値? – Iridio

+0

いいえ...私はそれを "-Select Me-"に設定し、残念ながらうまくいきませんでした。 – JaJ

答えて

21

int?を使用してみてください。 (すなわち、両方があなたのケースでTitleIdをしている。)

はこれを試してみてください:

@Html.DropDownListFor(model => 
    model.TitleId, (SelectList)ViewBag.TitleIdList, String.Empty) 

応じTitleIdListに改名あなたのSelectListのと。

+0

$$$$$投稿をありがとう!それだった! – JaJ

3

[Required] NULL可能オブジェクトとintはNULL可能にすることはできませんのためにのみ機能します。 ViewBagでSelectListのが問題で、フィールドと同じ名前を使用する場合、this work itemによると、クライアント側の検証ブレークの代わりにint

+0

いいえ、go!これは奇妙です。私には何の不都合がありますか?私はタイプintのnullableである別のドロップダウンリストを持っています。 [必須] [ディスプレイ(名前= "オーダーID")] public Nullable OrderId {get;セット; } これが空白の場合(「OrderId」)、検証によってキャッチされます。しかし、その値( "OrderId")は、オブジェクトバインディングモデル(データベース)ではNULL可能ですが、 "Title"はデータベースでnullableではありません。そのタイプをintに変更してから新しいビューを生成する必要がない限り、それは唯一の違いです。 他の考えはありますか? – JaJ

+0

[データアノテーション拡張の最小属性](http://dataannotationsextensions.org/Min/Create)を使用できますか? – Panos

1

それ以外の場合はこれを試してください。それが空の場合これは、赤などの境界線の色ドロップダウンが表示されます

select.input-validation-error { 
    /*border: 1px solid #e80c4d;*/ 
    /*Other styles*/ 
} 

あなたsite.cssファイルに以下のコードを追加します。

とビューページで

@Html.DropDownListFor(model => model.TitleID, Model.TitleIDList, "-- Select --", new { @class = "dropdownlist" }) @Html.ValidationMessageFor(model => model.TitleID, "This can't be blank") 
関連する問題