2

ええ:(簡単な質問*赤面*

私が次の列挙を持っていると想像してみましょう:-

string[] languages = new string[]
                     {
                         "en (uk)", // English (colour)
                         "en (us)", // English (color)
                         "fr", // French
                         "es" // Spanish
                     };

ViewData["Languages"] = languages;
ViewData["UserLanguage"] = "en (uk)";

これで武装した場合、ビューにラジオボタンを表示するにはどうすればよいですか?これを行う唯一の方法は、すべての言語値を列挙してRadioBoxをレンダリングすることですか?

例えば。pseduo-コード..。

<% foreach(string language in ViewData["Languages"] as string[])
{
  response.write Html.RadioBox(... not sure what to set in here ...)
}%>

乾杯!

4

1 に答える 1

2

速くて汚い:

<% foreach(string language in ViewData["Languages"] as string[]) { %>
  <%= Html.RadioBox(language,language,language == ViewData["UserLanguage"].ToString()) %>
<% } %>

問題は、そのビューデータにたくさんのマジックストリングがあることです。私がすることはこのようなものです:

  1. クラスを作成します:UserForm

    class UserForm {
    
         IList<string> _languages;
         string _selectedL;
    
         public UserForm (IList<string> languages, string selectedLanguage)
         {
           _languages = languages;
           _selectedL = selectedLanguage;
         }
    
         IEnumerable<SelectedListItem> UserLanguages {
             get {
                  return from l in _languages
                          select new SelectedListItem {
                              Text = l,
                              Value = l,
                              Selected = (l == _selectedL)
                          };
             }
         }
    }
    
  2. ビューは強く型付けされ、次のように入力する必要があります:UserForm次に、次のようにレンダリングできます。

    <%= Html.RadioButtonList("userLanguages",ViewData.Model.UserLanguages) %>
    
  3. コントローラーから:

    return View(new UserForm(listOfLanguages, selectedLanguage));
    

HTH。

編集: わかりました、それを見つけました-これRadioButtonListは名前空間(MVCFuturesプロジェクト)の拡張メソッドMicrosoft.Web.Mvcです-ここから取得できます:MVCFutures

于 2009-03-21T06:31:10.403 に答える