7

MultiSelectListに選択した値を設定しようとしていますが、ページに選択した値が表示されません。私はこれを行うためにあらゆる実用的な方法を試しましたが、それでも同じ結果が得られます。現在、コンストラクターを介して、選択したオブジェクトのリストを渡そうとしています。MultiSelectListオブジェクトを調べると、selectedvaluesプロパティには、コンストラクターを使用して渡したアイテムが含まれていますが、それでも表示されません。

多くの人が同じ問題を抱えていることに気づきましたが、私にとって有効な答えは見当たりませんでした。リストを繰り返し処理して、選択したプロパティをtrueに設定し、複数選択リストを最初から作成して、個々のアイテムの選択したプロパティを設定し、コンストラクターを使用してみました。これらはどれも機能していません。また、MultiSelectListプロパティに(試した)コントロールと同じ名前を付けることができず、機能しないという提案も見つかりました。このフレームワークを使用して、選択した値でドロップダウンリストを作成するのが難しいのはなぜですか?私は何かが足りないのですか?

<label for="StatesOfPractice">States of Practice:</label>
                    <br />
                    <%= Html.ListBox("StatesOfPractice", Model.StatesOfPracticeList)%>
                    <br />
                    <%= Html.ValidationMessage("StatesOfPractice")%>

編集1

MultiSelectListをインスタンス化すると発生しているようです。ビューでオブジェクトを調べて結果ビューを開くと、「アラスカ」が選択されているはずなのに選択されていないことがわかります。

http://imgur.com/eTIdH.jpg

私はこのようにインスタンス化しています。

new MultiSelectList(List<GenericDataContract>, "Code", "Description", List<GenericDataContract>);

GenericDataContractは、CodeとDescriptionの2つのプロパティを持つ単純なクラスです。最初のリストはすべての州であり、2番目のリストは私の選択した州です。

4

3 に答える 3

9

Grrrrrr、私はそれを見つけました。どうやら、選択されたアイテムは文字列のリストのみである可能性があります。これを渡すようにコードを変更したら、値を選択しました。

于 2010-03-03T21:22:05.730 に答える
4

OK、これは本当に私を混乱させましたが、私はそれを理解したと思います。

デフォルトが選択された状態でを表示する際に発生した問題は、の代わりに複数選択リストを表示するために使用しいたことでした。紛らわしいことに、HTML属性を指定して強制的に選択すると、複数選択リストが表示されますが、デフォルト値は1つのデフォルトのみを対象としているため、デフォルト値は機能しません。したがって、以下ではデフォルトが選択されていません。MultiSelectList@Html.DropDownListFor(...)@Html.ListBoxFor(...)DropDownListFor

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" })

しかし、これが本当のキッカーです。ASP.NETは、コントロールの種類をキャッシュDropDownListForしているように見えることがあるため、をに置き換えることができます。IISワーカープロセスを再起動するまでListBoxFor、デフォルトは事前に選択されません。それは本当に奇妙だと思います、そしてそれはしばらくの間私を投げました。

于 2012-12-19T11:25:41.690 に答える
1

アイテムのリストからではなく、モデルから選択されたアイテムをプルすると思います。StatesOfPracticeモデルプロパティに、選択するアイテムが入力されていることを確認してください。つまり、StatesOfPracticeListmodelプロパティは、リストの作成に使用されるアイテムのセットを提供します。StatesOfPracticeフォームが投稿されたときに選択されたプロパティ値のセットとなるモデルプロパティには、ビューがレンダリングされたときにデフォルトで選択された値も含まれている必要があります。内部では、HtmlHelperGetModelStateValueメソッドを使用して、選択リストに対して選択された値を検索します。これは、検証エラーが発生し、フォームがモデル状態エラーで再レンダリングされたときに、選択した値を維持するのが簡単になるように行われていると思います。

于 2010-03-03T19:54:47.827 に答える