Как создать несколько радиобоксов в ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/668842

  •  21-08-2019
  •  | 
  •  

Вопрос

да : ( простой вопрос * покраснеть *

Давайте представим, что у меня есть следующее перечисление:-

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

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

Вооружившись этим, как бы я отобразил переключатель в представлении?Является ли единственный способ сделать это перечислением всех языковых значений и визуализацией RadioBox?

например.псевдокод...

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

ваше здоровье!

Это было полезно?

Решение

Быстро и грязно:

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

Проблема в том, что у вас есть множество магических строк в этом viewdata.То, что я бы сделал, это что-то вроде этого:

  1. Создайте класс:Пользовательская форма

    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. представление должно быть строго типизированным и иметь тип :Пользовательская форма затем вы могли бы отобразить ее следующим образом :

    <%= Html.RadioButtonList("userLanguages",ViewData.Model.UserLanguages) %>
    
  3. С помощью контроллера вы бы :

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

ХТХ.

Редактировать: Хорошо, нашел это - the RadioButtonList является методом расширения в Microsoft.Web.Mvc пространство имен (проект MVCFutures) - вы можете получить его отсюда : Будущее MVCFutures

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top