MVC3 DropDownListFor - простий приклад?


112

У мене виникають проблеми DropDownListForв моєму додатку MVC3. Мені вдалося скористатися StackOverflow, щоб зрозуміти, як змусити їх відображатись у Перегляді, але тепер я не знаю, як зафіксувати значення у відповідних властивостях у Моделі перегляду при поданні. Для того щоб змусити це працювати, мені довелося створити внутрішній клас, який мав ідентифікатор та властивість значення, тоді я повинен був використовувати a, IEnumerable<Contrib>щоб задовольнити DropDownListForвимоги до параметра. Однак тепер, як MVC FW повинен відображати значення, вибране на цьому спадному списку, у властивість простого рядка на моїй моделі перегляду?

public class MyViewModelClass
{
    public class Contrib
    {
        public int ContribId { get; set; }
        public string Value { get; set; }
    }

    public IEnumerable<Contrib> ContribTypeOptions = 
        new List<Contrib>
        {
            new Contrib {ContribId = 0, Value = "Payroll Deduction"},
            new Contrib {ContribId = 1, Value = "Bill Me"}
        };

    [DisplayName("Contribution Type")]
    public string ContribType { get; set; }
}

У своєму перегляді я розміщую спадне меню на такій сторінці:

<div class="editor-label">
    @Html.LabelFor(m => m.ContribType)
</div>
<div class="editor-field">
    @Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId, 
             new SelectList(Model.ContribTypeOptions, "ContribId", "Value"))
</div>

Коли я надсилаю форму, ContribTypeце (звичайно) недійсне.

Який правильний спосіб це зробити?

Відповіді:


166

Ви повинні зробити так:

@Html.DropDownListFor(m => m.ContribType, 
                new SelectList(Model.ContribTypeOptions, 
                               "ContribId", "Value"))

Де:

m => m.ContribType

- це властивість, де буде значення результату.


2
СПАСИБІ!!! Сергію, саме це я шукав багато годин.
Трей Керролл

Дякую :) за вашу відповідь Чи є спосіб показати тут "- Виберіть--" ?
kbvishnu

1
@VeeKeyBee, ви можете додати новий елемент до списку contribTypeOptions, наприклад, new Contrib {ContribId = -1, Value = "Please Select"}він буде показаний у спадному списку. Тоді ви можете перевірити, чи ContribTypeце -1це означає, що користувач не вибрав жодного значення
Сергій Гаврук

9
Зробити це можна:@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value", Model.ContribTypeOptions.First().ContribId), "Select, please")
Сергій Гаврук

1
@SergeyGavruk. Ця відповідь була використана як невідповідність у кількох останніх питаннях, але бентежить деяких користувачів через твердження . Останній параметр конструктора списку Select - це вибране значення . Останній параметр ігнорується методом (який внутрішньо будує свій власний SelectList) . Його значення властивості ( ContribType), яке визначає, що вибрано (саме так працює прив'язка моделі), і код повинен бути просто @Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value").

7

Я думаю, що це допоможе: в Controller отримати елементи списку та вибране значення

public ActionResult Edit(int id)
{
    ItemsStore item = itemStoreRepository.FindById(id);
    ViewBag.CategoryId = new SelectList(categoryRepository.Query().Get(), 
                                        "Id", "Name",item.CategoryId);

    // ViewBag to pass values to View and SelectList
    //(get list of items,valuefield,textfield,selectedValue)

    return View(item);
}

і в Вид

@Html.DropDownList("CategoryId",String.Empty)

5
Зазвичай це не божий зразок, щоб піддавати сховище таким видом, як це.
Андре Пена

6

Для прив’язки динамічних даних у DropDownList ви можете зробити наступне:

Створіть ViewBag в Controller, як показано нижче

ViewBag.ContribTypeOptions = yourFunctionValue();

тепер використовуйте це значення для перегляду, як показано нижче:

@Html.DropDownListFor(m => m.ContribType, 
    new SelectList(@ViewBag.ContribTypeOptions, "ContribId", 
                   "Value", Model.ContribTypeOptions.First().ContribId), 
    "Select, please")

0
     @Html.DropDownListFor(m => m.SelectedValue,Your List,"ID","Values")

Тут Значення - це той об'єкт моделі, де ви хочете зберегти вибране значення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.