2010-12-20 15 views
0

これは数回前に尋ねられましたが、既存のソリューションは適切なパターンではなくハックのように見えます。Html.DropDownListにバグがあり、選択された値が反映されていませんか?

私は単純なドロップダウンリストを持っています。私はそれをデータで設定し、アイテムをあらかじめ選択しています。私は「データ部分を取り込む」に成功していますが、あらかじめ選択した優先項目を取得するのに失敗しています。

私はASP.NET MVC 3 RC2を使用しています。

重要なコードビット:

{ 
    // Bunch of code 
    CategoryOptions = new SelectList(categories, "Id", "Slug", article.Category.Id); 
} 

は今... CategoryOptionsはそうのようなHTMLヘルパーに渡される:

@Html.DropDownListFor(a => a.Category, Model.CategoryOptions) 

私がヘルパーに渡される値を見てきましたアイテムの1つが選択された値が真に設定されていることを確認しました。

alt text

しかし、それはヘルパーによって生成されているHtmlに反映されていません。 ...タグのどれもselected = "selected"属性を持っていません。

私は、コードを少し調べるためにリフレクターを使用して、この行(SelectExtensions.SelectInternal)はdiceyなります

item.Selected = (item.Value != null) ? set.Contains(item.Value) : set.Contains(item.Text); 

私はここで何か間違ったことをやっていますか?またはフレームワーク(ASP.NET MVC 3 RC2)がここに不具合があります。

答えて

1

Ok ...私はそれを修正しました。

カテゴリスラッグの代わりにカテゴリIDを使用するように私のビューモデルを変更しました。 「値」私は(この場合、A => a.CategoryId)を選択しているモデルの値は、選択したものと同じタイプを持つことがあると思い

@Html.DropDownListFor(a => a.CategoryId, Model.CategoryOptions, new { @class = "ask-category-field" }) 

:だから今、私の見解は次のようになります(私は、フレームワークコードを調べるために時間が増えると、この説明を改良します)しかし、実際には賢明なコーディング:) ASP.NET MVC開発者の帽子。

これは期待どおりに動作し、PRGライフサイクル全体で選択したアイテムの変更を保持します。

これは誰かを助けることを望みます。

0

ドロップダウンアイテムのselectedプロパティは、実際にHTMLで選択されるドロップダウンアイテムを設定しません。

これまでにこの問題が発生しました。

ViewDataDictionaryの拡張メソッドで、選択した項目&の選択リストの値に基づいて、指定した選択リストの値を設定することができます。

public static void SetSelectedValueFor(this ViewDataDictionary viewDataDictionary, string key, IEnumerable<SelectListItem> items) 
     { 
      // HACK: Store the selected item value in ViewData so that the DropDownListFor knows which one should be selected. 
      // It's a bit of a hack but it seems to be the only way I can do it since DropdownListFor ignores the Selected property on SelectListItem. 
      var x = items.Where(c => c.Selected).FirstOrDefault(); 
      if (x != null) 
      { 
       viewDataDictionary[key] = x.Value; 
      } 
     } 
+0

回答ありがとうございました...私は質問を投稿してから数分後に見つけた回答も掲載しました。これがあなたにも役立つことを願っています。 – kidoman

関連する問題