2015-04-21 2 views
0

У меня есть фиксированный вариант dropdownlist на моей странице html. Он содержит три варианта (по имени, по представлениям, по полю) для сортировки данных, отображаемых на странице. Когда значение в раскрывающемся списке изменяется, я отправляю форму, и контроллер возвращает обновленные данные в соответствии с выбранным выбором сортировки. Но выбранная опция в раскрывающемся списке сбрасывается до первого варианта. Как установить выбранный параметр в раскрывающемся списке.Как сохранить выбранную опцию после отправки формы в asp.net mvc?

Мне нужно отправить форму и не отправлять запрос ajax.

+2

В идеале, запрос ajax будет лучше всего подходит для такого рода вещей, но вы также можете сохранить выбранное значение в ViewBag, возвращая отсортированные результаты и в событие document.ready в jquery, установите значение обратно в раскрывающемся списке. Я знаю, что это не аккуратно, но если вы не хотите использовать Ajax, то это то, что вы можете сделать. – Sushil

+0

Вы что-то пробовали по линии присоединения функции .change(), прикрепленной к выпадающему списку в JQuery ?? https://api.jquery.com/change/ – greendave11

+0

@ greendave11, даже если он использует событие jQuery change(), ему все равно придется отправить запрос на сервер, и он не хочет использовать Ajax. – Sushil

ответ

3

вам нужно использовать .val(), чтобы установить выбранное значение в раскрывающемся списке. попробуйте это $('#YourDropDownList').val(SelectedOrderBy);

1

Если у вас есть 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); 
} 
+0

Да, этот путь также верен, но поскольку мои варианты выпадания были исправлены и я уже не буду изменяться, я решил обработать его только через jquery. Но спасибо за кристально чистое объяснение! – Saurabh

Смежные вопросы