Передача более одного значения из списка DropDown

1

Мне нужно передать 2 значения из метода DropDown в Action:

@using (Html.BeginForm("AddMemberToEvent"))
{
 @Html.DropDownList("ddlPeopleList", 
       new SelectList(Model.PeopleList, "Id", "Username"), "Select: ", 
       new { onchange = "this.form.submit();", eventID = Model.catID })
}

[HttpPost]
public ActionResult AddMemberToEvent(string ddlPeopleList, string eventID) 
{

Параметр ddlPeopleList работает. , и я немного смущен тем, что этот первый параметр для списка DropDown. , ., это имя DropDown или это значение Selected, используемое кодом?

Идентификатор события не передается. Я поставил точку разрыва в раскрывающемся списке, и там было правильное значение, оно просто не передается методу. Есть ли лучший способ реализовать это? благодаря

ОБНОВЛЕНИЕ: Я решил это, сделав это. Использование скрытого поля:

 @using (Html.BeginForm("AddMemberToEvent"))
            {
                @Html.Hidden("eventID", Model.catID )
Теги:
razor
asp.net-mvc
asp.net-mvc-4
asp.net-mvc-3

1 ответ

5
Лучший ответ

Разный конструктор Html.DropDownList - это все, что связано с привязкой модели к стороне действия контроллера.

В действии у нас есть код для заполнения списка

        public ActionResult Index()
        {
            List<SelectListItem> items = new List<SelectListItem>();
            items.Add(new SelectListItem { Text = "Action", Value = "0" });
            items.Add(new SelectListItem { Text = "Drama", Value = "1" });
            items.Add(new SelectListItem { Text = "Comedy", Value = "2", Selected = true });
            items.Add(new SelectListItem { Text = "Science Fiction", Value = "3" });
            ViewBag.MovieType = items;
            return View();
        }

На стороне клиента сначала рассмотрим самый простой конструктор, который получил 1 параметр, который является именем выпадающего списка.

@Html.DropDownList("MovieType")

Когда он отображается, html

<select id="MovieType" name="MovieType"><option value="0">Action</option>
<option value="1">Drama</option>
<option selected="selected" value="2">Comedy</option>
<option value="3">Science Fiction</option>
</select>

см. здесь тег id и name для select - MovieType, когда он отправляется в действие, связующее устройство модели попытается привязать значение этого выбора к свойству с именем MovieType в целевом объекте связующего.

Теперь рассмотрим немного сложный

@Html.DropDownList("dropdown", (List<SelectListItem>)ViewBag.MovieType)

html для него:

<select id="dropdown" name="dropdown"><option value="0">Action</option>
<option value="1">Drama</option>
<option selected="selected" value="2">Comedy</option>
<option value="3">Science Fiction</option>
</select>

обратите внимание, что единственное различие - это тег id и name, он изменяет поведение привязки модели, которое на этот раз оно найдет свойство выпадающего списка в целевом объекте привязки.

теперь рассмотрим наиболее сложный сценарий, который имеет 4 параметра.

@Html.DropDownList("dropdown1", (List<SelectListItem>)ViewBag.MovieType, "Movie Type", new { xxx = "abc" })

Часть Html:

<select id="dropdown1" name="dropdown1" xxx="abc">
<option value="">Movie Type</option>
<option value="0">Action</option>
<option value="1">Drama</option>
<option selected="selected" value="2">Comedy</option>
<option value="3">Science Fiction</option>
</select>

id и name - dropdown1, атрибут html - xxx, а значение xxx - abc. Тип фильма вставляется в первое место в коллекции selectlistitem, а значение пусто. Модель связующего будет пытаться связать dropdown1 с целевым объектом привязки.

Чтобы ответить на ваш второй вопрос, связующее устройство модели не будет извлекать значение из атрибута html, поэтому eventId не заполняется.

  • 0
    спасибо за объяснение, поэтому первый параметр удваивается как имя / идентификатор и выбранное поле. Я нашел решение, добавив скрытое поле.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню