2009-07-30 15 views
1

以下のコードは、整数値の束をドロップダウンに入力し、現在選択されている値(この場合は13)を選択項目にすることを目的としています。SelectedItemがASPNET.MVCのSelectListに記憶されていない

私は同じテクニックを使用しましたが、文字列の値に対しては、現在の値が何であるかを表示するたびに覚えています。

var x = new[] { 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; 

ViewData["Field"] = new SelectList(x, 13); 

鑑み:コントローラで

<%=Html.DropDownList("Field", (IEnumerable<SelectListItem>)ViewData["Field"])%> 

IデバッグとViewDataを[ "フィールド"]オブジェクトを見て、それは13のSelectedValueのを持っているので、それがなければなりませんビューに到達しましたが、ページに表示されているすべての値が1〜15の値でドロップダウン表示されますが、1が表示されます(選択されていないので最初のものが表示されます)

これはバグですか?本当にばかげた何か?

グレアム

答えて

4

おかげで私はそれが実際にSelectListの要素のSelectedプロパティを使用していないことを思い出しているようです。私は通常、選択リストに1つのViewDataアイテムを持ち、選択した値にもう1つのViewDataアイテムを持っています。

コントローラー:

var x = new[] { 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; 
ViewData["Fields"] = new SelectList(x); 
ViewData["Field"] = 13; 

ビュー

<%= Html.DropDownList("Field", (IEnumerable<SelectListItem>)ViewData["Fields"]) %> 
+0

ありがとうございました!神はそれがなぜ文字列バージョンと異なるのかを知っていますが、あなたの解決策は治療法です!ありがとう!! – Graeme

+0

これは正しい方法です。最初のパラメータは、値を添付するフィールド名です。これは、selectlistitemデータを渡すために使用するメカニズムとは異なります。同じキーを使用することで、少しのデータで二重の義務を果たしているので、うまく動作しません。 しかし、私はそれが設定されている場合、選択されたプロパティを使用することを確信しています。これは設定しません。 – Mallioch

+0

私は以前のバージョンのコードを覚えておく必要があります。私はちょうどチェックし、Selectedプロパティを使用しますが、ビューからデータを取得するかどうかに基づいてアイテムの選択されたプロパティをリセットするいくつかの条件があります。私はまだこれがドロップダウンを処理する最善の方法であるかどうかについていくつかの研究をしなければならないでしょう。 – tvanfosson

0

これは私に起こっていました!私は何時間も私の髪を引っ張っていましたが、結局それを理解しました。

<%= Html.DropDownList("bookId", Model.ProductMenu, new { onchange = "goToBook();" })%> 

をそして、それは選択されたオプションを印刷していなかった。私の場合、私はこのようなドロップダウンリストを作成していました。

<%= Html.DropDownList("segmentIndex", Model.SegmentMenu, new { onchange = "goToSegment();" })%> 

彼らはコントローラでまったく同じ方法で生成されていた、とビューが返されたとしてデバッガが常に適切に選択した値を示すだろう。しかし、右隣にあるドロップダウンが正常に動作しました。だから何なの?

ビュー自体に違いがありました。私のアプリケーションの "bookId"はルート/クエリーストリングの値になり、segmentIndexはそうではありません。単に "bookId"という名前を変更すると、 "bookIdBLAH"に固定されています。

関連する問題