Мне нужно передать 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 )
Разный конструктор 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 не заполняется.