2011-10-06 5 views
6

私は典型的なYesNoの種類のドロップダウンをアプリケーションに持っています。そのために、私は、将来の拡張pruposeのためのモデル(むしろViewModel Utility)クラスを開発しました。その後DropDownListFor(...)デフォルトでboolean falseを選択しています

public string Text { get; set; } // represents text part 
     public bool Value { get; set; } // represent value 
     public List<DropDown> DropDowns { get; set; } //list for binding 
     public void BuildYesNoDropDown() 
     { 
      DropDowns = new List<DropDown>(); 
      DropDowns.Add(new DropDown { Text = "Yes", Value = true }); 
      DropDowns.Add(new DropDown { Text = "No", Value = false }); 
     } 

は、私は次のようなビューでバインド:

ビューで
@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.DropDowns, "Value", "Text",1),"Select") //last para - OptionLabel 

、すべての3つのパラメータは、「はい」と「いいえ」の表示は、すなわち「選択」になっています。しかし、デフォルトでは「いいえ」が選択されています。私は "値"プロパティを整数として作成する場合、正常に動作し、デフォルトでは "選択"が選択されますが、コードで言及されているように、bool型の場合は "いいえ"が選択されます。

DataValueFieldがboolのときの通常の動作を取得するにはどうすればよいですか?

答えて

7

モデル:

public bool? Value { get; set; } 

ビュー:ヌル、真、偽:これは、NULL可能ブールの3つの状態に合わせ3つの状態を自動的にドロップダウンリストを作る

@Html.EditorFor(model => model.Value) 

。あなたは価値が回答することを要求した場合、あなたはそのようなデータ注釈を使用することができます。

モデル:

[Required] 
public bool? Value { get; set; } 

はお持ち帰りは、あなたのモデルが現実のモデルであることが必要である - それは解除からの入力値をモデル化する必要があります設定する。 intを入力する必要がある場合は、null可能なint(したがってint?)を使用し、その値を必要とする可能性があります。このようにして、初期値は0ではなくヌルになります。すでにヌル可能なstring以外のデータ型と同様です。

+0

感謝を修正しました。しかし、私の質問は誤解されたと思います。現在、bool値がデフォルトで "NO"が選択されています。代わりに、OptionLabelを選択する必要がある「選択」が必要です。 – StartingFromScratch

+0

私は他の人にそれに答えるようにします - それらのための 'DropDown'モデルを提供する必要があります。 – Cymen

+0

このコードでは、x => x.SelectedValueの型がboolなので、エンジンは最後に "false"を選択しなければならない"値が指定されたコレクションにあります。私は確信しています! – StartingFromScratch

1

私はこれが古い話題だと知っていますが、他の人にとってはこれについて少しの背景を知っておくと便利かもしれないと思いました。

無いがブール値のデフォルト値は

偽であるため、あなたは自分のビューモデルでは、このような ヌル可能なブールようにモデルを設定した場合、それはデフォルトでデフォルトを選択する必要があり、デフォルトで選択されて値。 :

public bool? Value { get; set; } 

、その後、あなただけのビューでこのようなあなたのドロップダウンリストを設定します。

@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.DropDowns, "Value", "Text",1),"{Default Select Value}") 

この結果は、ブール値がnull自動的に選択されたオプションであるときに、デフォルト値でなければならないことであるべき{Default Select Value}

3

私のケースでは、私は同じページにこれらのドロップダウンの束を持っていました。私は巧みで、選択リストを再利用すると思いました。

var YesOrNoTriState = new List<SelectListItem> { 
    new SelectListItem { Text = "Select", Value = "" }, 
    new SelectListItem { Text = "Yes", Value = true.ToString() }, 
    new SelectListItem { Text = "No", Value = false.ToString() } 
}; 

と働いていませんでしたビュー

<%: Html.DropDownListFor(x => x.Field1, Model.YesOrNoTriState) %> 
<%: Html.DropDownListFor(x => x.Field2, Model.YesOrNoTriState) %> 

インチ私は、各ドロップダウンのために個別の選択リストを初期化し、それが問題

9

のViewModel

public bool flag { get; set; } 

ビュー返信用

@Html.DropDownListFor(model => model.flag, new List<SelectListItem>() 
{ 
    new SelectListItem() { Text = "Yes", Value = "True" }, 
    new SelectListItem() { Text = "No", Value = "False"} 
}, "Select.....", new { @id = "flag", @class="form-control" }) 
@Html.ValidationMessageFor(model => model.flag) 
+0

モデルに '[Required]'データアノテーションがある場合、これは機能しません。 –

+1

正しいjavascript検証を使用する必要があります。 – JoshYates1980

+1

私の魅力のように働いた!私は3つ目のパラメータ "Select ....."を省略しました。これは必須フィールドを扱っていたので、常に入力されます。 – Reddy

関連する問題