.NET MVC MultiSelectListと選択された値
-
24-09-2019 - |
質問
私はMultiSelectListのための選択された値を設定しようとしていますが、選択されたように、ページには、任意の値を表示しません。私はこれを行うと、まだ同じ結果を得るためにあらゆる実用的な方法を試してみました。私は現在、コンストラクタ経由で選択したオブジェクトのリストを渡ししようとしています。どのような私を取得することは、私はMultiSelectListオブジェクトを検査する際、selectedvaluesプロパティは、私は、コンストラクタを使用して、それに合格しているが、それはまだ表示されないという項目が含まれていることです。
私は多くの人が同じ問題を抱えているが、私は私のために働いた答えを見ていないことに気づきました。私は、リストを反復処理し、trueに選択したプロパティを設定しようとしている、私は最初からmultiselectlistを作成し、プロパティを選択し、私はコンストラクタを使用しようとしている各個々の項目を設定しようとしています。これらのどれも働いていません。私はまた、MultiSelectListプロパティは(私が試した)コントロールと同じ名前を付けることができませんでしたし、それが機能しなかったことを示唆しました。なぜそれがこのフレームワークを使用して、選択した値とドロップダウンリストを作成するので、難しいですか?何かが欠けアムI?
<label for="StatesOfPractice">States of Practice:</label>
<br />
<%= Html.ListBox("StatesOfPractice", Model.StatesOfPracticeList)%>
<br />
<%= Html.ValidationMessage("StatesOfPractice")%>
編集1
私はMultiSelectListをインスタンス化するとき、これは起こっているように見えます。私は、ビュー内のオブジェクトを検査し、結果を開いた場合、私はそれがあるべきことを知っているとき、「アラスカ」が選択されていないことを確認することができます表示します。
私はこのようにインスタンス化しています。
new MultiSelectList(List<GenericDataContract>, "Code", "Description", List<GenericDataContract>);
はGenericDataContractは、単に2つのプロパティコードと説明を持つクラスです。最初のリストは、第二のリストは私の選択した状態で、状態の全てである。
解決
私はそれがない項目のリストから、モデルから選択した項目を引っ張ると信じています。あなたのStatesOfPractice
モデルプロパティを選択したい項目に移入されていることを確認してください。つまり、StatesOfPracticeList
モデルプロパティは、リストを作成するために使用されるアイテムのセットを提供します。ビューがレンダリングされるとき、フォームがポストされたときに選択したプロパティ値のセットになりますモデルプロパティStatesOfPractice
は、また、選択された値をデフォルト値を含める必要があります。ボンネットの下には、任意の選択リストのために選択した値(複数可)を見つけるためのHtmlHelper GetModelStateValue
メソッドを使用しています。私は検証エラーがある場合に、選択した値を維持するために簡単で、フォームがモデル状態のエラーで再レンダリングされるように、これが行われると推定します。
他のヒント
Grrrrrr、私はそれを発見しました。どうやら、選択した項目は、文字列のみのリストを指定できます。私はそれでこれを渡すために自分のコードを変更したら、値を選択しました。
OK、この1つは本当に私を混乱が、私は、私はそれを考え出したんだと思います。
I のは、選択したデフォルト値を使用してディスプレイにMultiSelectList
を取得していた問題は、私が代わりに@Html.DropDownListFor(...)
のマルチ選択リストを表示するには、@Html.ListBoxFor(...)
を使用していたということでした。唯一持っていることを意図しているため紛らわしい、DropDownListFor
のは、あなたが指定した場合、HTMLがそうすることを強制するために属性が、デフォルト値はのの動作しません。のマルチ選択リストが表示されます1デフォルト - 以下は、したがって、のは任意のデフォルトが選択されていません。
List<string> myStrings;
myStrings = new List<string>();
myStrings.Add("aaa");
myStrings.Add("bbb");
myStrings.Add("ccc");
ViewData["MyStringsDropdown"] = new MultiSelectList(
myStrings.Select(abc => new { StringId = abc, Title = abc + "Title" }),
"StringId",
"Title",
myStrings.Where(str => str == "aaa" || str == "ccc").ToList()
);
...
@Html.DropDownListFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })
選択したただし、次ののはは "AAA" と "CCC" のデフォルト値を表示します。
@Html.ListBoxFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })
しかし、ここで本当のキッカーです。あなたはIISワーカープロセスを再起動するまで、あなたが任意のデフォルト<全角> DropDownListFor
でListBoxFor
を交換し、それはまだありません事前に選択することができるようにASP.NETは時に、の制御のキャッシュのタイプのようですem>の。私は本当に奇妙なことを見つけて、それはしばらくの間、私を投げます。