2012-01-17 14 views
1

SelectListItemのSelectedプロパティをリセットします。私は、そのうちの一つは、それが選択プロパティが「真」に設定されていていてIEnumerable < SelectListItem>を作成します。しかし、次のメソッドに渡すとSelectedプロパティが「false」にリセットされ、ドロップダウンコントロールに適切な項目が選択されません。SelectExtensions.DropDownListはSelectExtensionのDropDownListのメソッドを使用しているとき、私は奇妙な行動を発見した

のpublic static MvcHtmlStringのDropDownList(このHtmlHelperのHtmlHelperの、文字列名、IEnumerableをSelectListの);

私もSelectListのクラスを使用してみましたし、SelectedValueのプロパティを指定したが、依然として適切<オプション>タグが選択されていないしています。

私が選択した値を維持する方法を上の任意のアイデア?

はHACKを書きましたが、以下SOLUTION

を好むだろうMVCから放出されたHTMLを使用する前に選択したオプションを変更するためのコードハックです。私はこの解決策が嫌いですが、それについて他にどのように進むべきかわかりません。

// the following is a hack due to a precived MVC 3 bug 
var html = SelectExtensions.DropDownList(helper, propertyName, source).ToHtmlString(); 
html = html.Replace("selected=\"selected\"", string.Empty); 
html = html.Replace(string.Format("value=\"{0}\"", source.SelectedValue), string.Format("value=\"{0}\" selected=\"selected\"", source.SelectedValue)); 
+0

はどのようにこのヘルパーを使用していますか?あなたのモデル構造、コントローラー、そしてあなたの問題をもっとよく見せるアクションからなる完全な例を表示してください。現在あなたの質問は私には厳密には意味をなさない。 –

答えて

1

それはhtml.ViewDataに見て、ダウンあなたのドロップの名前と一致するキー(この場合はpropertyName)を検出し、代わりにそこに値を使用しようとするためのフレームワークは、あなたの選択した値を無視しています。

一つの解決策は、あなたがあなたのDropDownListコントロールを作成する前にhtml.ViewDataを変更することです。あなたのケースでは、このような何か:

html.ViewData[propertyName] = source.SelectedValue; 

より一般的な例:

html.ViewData['name of your DDL'] = 'The real value you want selected'; 
関連する問題