Передайте выбранное значение раскрывающегося списка представлению в Html.BeginForm()
Мне нужно передать значения полей из представления в контроллер. Мой код работает для текстового поля, но не работает для раскрывающегося списка. Я видел много ответов для Html.DropdownlistFor, но ни одного для этого случая. Есть ли способ, которым я могу сделать это?
Посмотреть:
@var searchTypes = new SelectList(new[]
{
new SelectListItem {Value = "0", Text = "Email"},
new SelectListItem {Value = "1", Text = "Last Name"},
new SelectListItem {Value = "2", Text = "First Name"},
}, "Value", "Text");
@using (Html.BeginForm("Index", "Users", new { isSearch = 1, searchTerm = "SearchTerm", searchType="ddlSearchType" }, FormMethod.Post))
{
<div class="well well-sm search">
<div class="row">
<div class="col-sm-6">
<div class="form-group">
@Html.TextBox("SearchTerm",(string)ViewBag.SearchTerm, new {name= "SearchTerm", @class = "form-control", placeholder = "Search Term" })
</div>
</div>
<div class="col-sm-3">
<div class="form-group">
<div class="controls">
@Html.DropDownList("ddlSearchType", searchTypes, new { id = "searchtypeselect", @class = "form-control" })
</div>
</div>
</div>
<div class="col-sm-2">
<button class="btn btn-primary pull-right" type="submit"><i class="glyphicon glyphicon-search"></i>Search</button>
</div>
</div>
</div>
}
контроллер:
public ActionResult Index(int? isSearch,string searchTerm,string searchType)
{
}
Этот ответ решает ту же проблему, но у него нет текстового поля в представлении.
Чтобы уточнить, поисковая часть является лишь частью моей точки зрения. У меня есть постраничный список ниже. Поэтому мне нужно поле IsSearch, чтобы увидеть, нажата ли кнопка поиска или это изменение страницы, которое также перейдет к тому же методу действия.
2 ответа
Ответ буквально там в ссылке, которую вы разместили. Вам необходимо удалить параметр раскрывающегося списка из Html.BeginForm и использовать ту же строку в контроллере и в имени раскрывающегося списка.
@using (Html.BeginForm("Index", "Users", new { isSearch = 1, searchTerm = "SearchTerm"}, FormMethod.Post))
public ActionResult Index(int? isSearch,string searchTerm,string ddlSearchType)
{
}
Чтобы исправить проблему со значениями, вам нужно добавить четвертый параметр в свой контроллер списка поиска, который должен быть выбранным значением.
@var searchTypes = new SelectList(new[]
{
new SelectListItem {Value = "0", Text = "Email"},
new SelectListItem {Value = "1", Text = "Last Name"},
new SelectListItem {Value = "2", Text = "First Name"},
}, "Value", "Text", selectedValueHere);
Затем вы должны изменить свой помощник BeginForm и удалить имеющиеся у вас атрибуты маршрута. Вероятно, у вас нет определенного для них маршрута, и вы хотите, чтобы значения поступали из представления формы, а не из жестко закодированных строк, которые вы отправляете в помощнике. Вы также можете удалить метод, поскольку по умолчанию используется POST.
@using (Html.BeginForm("Index", "Users",new { isSearch = 1 }))
Наконец, вам нужно настроить имя вашего выпадающего меню, чтобы оно совпадало с именем, ожидаемым в действии POST.
@Html.DropDownList("SearchType", searchTypes, new { id = "searchtypeselect", @class = "form-control" })