значения для элементов DropDownList - PullRequest
1 голос
/ 07 декабря 2011

У меня есть следующий код

@Html.DropDownList("optionsforuser", new SelectList(new[] { "Option1", "Option2", "Option3" }), "Select")

Можно ли в любом случае инициализировать значение 100 для Option1, 200 для Option2, 250 для Option3 и т. Д. В SelectList?

Ответы [ 4 ]

5 голосов
/ 07 декабря 2011

Попробуйте использовать это расширение:

@Html.DropDownList("optionsforuser", 
    new SelectList(new Dictionary<string, int> 
        {
            {"Option1", 100},
            {"Option2", 200},
            {"Option3", 250}
        },
        "Value", "Key")
)

и передайте ему Dictionary<string, int> с dataValueField и dataTextField, заполненным вашими значениями и текстом


SelectExtensions.DropDownListМетод (HtmlHelper, String, IEnumerable (Of SelectListItem))

public static MvcHtmlString DropDownList(
    this HtmlHelper htmlHelper,
    string name,
    IEnumerable<SelectListItem> selectList
)

Конструктор SelectList (IEnumerable, String, String)

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField
)
1 голос
/ 25 апреля 2014

Для ситуаций, когда я просто хочу жестко закодировать выбранные элементы списка (т.е. не получить их из некоторой предопределенной коллекции), я использую этот удобный маленький класс:

public class BetterSelectList : List<SelectListItem>
{
    public void Add(string text, object value, bool selected = false) {
        this.Add(new SelectListItem {
            Text = text, 
            Value = value.ToString(), 
            Selected = selected
        });
    }
}

Почему это "лучше"«?Он реализует IEnumerable и имеет многопараметрический метод Add, который является всем, что нужно компилятору C #, чтобы позволить вам использовать инициализаторы словарного стиля , что приводит к самой бесшумной инициализациивозможно:

var optionsForUser = new BetterSelectList {
    { "Option1", 100, true },
    { "Option2", 200 },
    { "Option3", 250 }
};
0 голосов
/ 07 декабря 2011

Вы можете сделать это по вашему мнению так же, как и другие, но вы не можете вместо этого сделать это в контроллере?

Например, на ваш взгляд модель :

public class ViewModel()
{
    public List<SelectListItem> OptionsForUser{ get; set; }
}

В вашем контроллере :

var optionsForUser = new List<SelectListItem>();
optionsForUser.Add(new SelectListItem { Text = "Option1", Value = "100"});
optionsForUser.Add(new SelectListItem { Text = "Option2", Value = "200"});
optionsForUser.Add(new SelectListItem { Text = "Option3", Value = "250"});

var viewmodel = new ViewModel();
viewmodel.OptionsForUser = optionsForUser;
return view(viewmodel);

затем в вашем представлении :

@Html.DropDownList("optionsforuser", Model.OptionsForUser);

Эти другие решения тоже будут работать, я просто думаю, что не очень «чисто» инициализировать ваш выпадающий список в вашем представлении. Но это, вероятно, дело вкуса

0 голосов
/ 07 декабря 2011

Да, вы установили текст и значение

var selections = new List<SelectListItem>();
selections.Add(new SelectListItem() { Text = "Option1", Value = "100" });
selections.Add(new SelectListItem() { Text = "Option2", Value ="200" });

Вот статья MSDN по спискам выбора: список выбора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...