Если у вас есть java-скрипт, подключенный к событию изменения выпадающего списка, и вы вызываете form.submit()
там, то же самое, что и при отправке формы с помощью кнопки отправки (на вашей странице получен ответ от сервера).
Вам нужно убедиться, что ваша модель просмотра имеет свойство, которое может содержать выбранный элемент в раскрывающемся списке.
имеют вид модели, как этот
public class CriteriaVM
{
public IEnumerable<SelectListItem> SortItems { set; get; }
public String SelectedSortItem { set; get; }
public CriteriaVM()
{
this.SortItems=new List<SelectListItem>();
}
}
Так теперь в вашем методе действия GET, Вы загружаете SortItems
коллекции и рендеринга, которые на ваш взгляд.
public ActionResult Index()
{
var vm = new CriteriaVM {SortItems = GetItems()};
return View(vm);
}
private List<SelectListItem> GetItems()
{
return new List<SelectListItem>
{
new SelectListItem {Value = "Name", Text = "Name"},
new SelectListItem {Value = "City", Text = "City"}
};
}
и ваше мнение
@model YourNameSpaceHere.CriteriaVM
@using (Html.BeginForm())
{
@Html.DropDownListFor(s=>s.SelectedSortItem,Model.SortItems,"Select")
<input type="submit" />
<div>Selected : @Model.SelectedSortItem</div>
}
<script type="text/javascript">
//Assuming jQuery library is included in the page
$(function() {
//whenever user changes the drop down,submit the form
$("#SelectedSortItem").change(function() {
$("#SelectedSortItem").closest("form").submit();
});
});
</script>
И в действии HttpPost, убедитесь, что вы устанавливаете SelectedSortItem
свойство явно после загрузки SortItems
собственности.
[HttpPost]
public ActionResult Index(CriteriaVM model)
{
var selected = model.SelectedSortItem;
model.SortItems = GetItems();
model.SelectedSortItem = selected;
return View(model);
}
В идеале, запрос ajax будет лучше всего подходит для такого рода вещей, но вы также можете сохранить выбранное значение в ViewBag, возвращая отсортированные результаты и в событие document.ready в jquery, установите значение обратно в раскрывающемся списке. Я знаю, что это не аккуратно, но если вы не хотите использовать Ajax, то это то, что вы можете сделать. – Sushil
Вы что-то пробовали по линии присоединения функции .change(), прикрепленной к выпадающему списку в JQuery ?? https://api.jquery.com/change/ – greendave11
@ greendave11, даже если он использует событие jQuery change(), ему все равно придется отправить запрос на сервер, и он не хочет использовать Ajax. – Sushil