Страница перезагрузки MVC после выбора значения из выпадающего списка - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть рабочее решение, но я не знаю, как перезагрузить страницу после выбора определенного идентификатора из выпадающего списка. Мой список заполняется из БД. Когда я выбираю его, я вижу идентификатор и соответствующие данные для него. Тем не менее, нет никаких изменений на экране.

Класс контроллера:

public ActionResult Index()
        {
            var model = test.getStuff();
            ViewBag.IDs = new SelectList(test.getID(), "", "ID");
            return View(model);
        }

[HttpPost]
        public ActionResult getDataBySelectedID(string selectedId)
        {
            var que = test.getHello(selectedId);
            return View(que);

        }

Просмотр класса:

@Html.DropDownList("ID", ViewBag.IDs as SelectList) 

 $(document).ready(function () {
     $("#ID").on("change", function () {
            var selectedId = this.value;
            var url = "/Sample/getDataBySelectedID";

            $.ajax({
                method: "POST",
                dataType: "json",
                url: url,
                data: {
                    selectedId: selectedId
                }
            });
        });
     });

Как я могу перезагрузить страницу с выбранным значением и соответствующими ему данными?

Любая помощь будет оценена!

Спасибо.

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

не нужно использовать ajax в вашем случае

просто сделай

window.location.href =  "/Sample/getDataBySelectedID?selectedId=" +selectedId;

в вашей функции onchange, и, по вашему мнению, верните его как

[HttpGet]
        public ActionResult getDataBySelectedID(string selectedId)
        {
            var que = test.getHello(selectedId);
            return View("~/Index.cshtml",que);

        }

надеясь, что "que" - это та же модель, которую вы используете в своей индексной функции

0 голосов
/ 07 ноября 2018

Поскольку вы хотите перезагрузить страницу после изменения выпадающего списка, вы должны обработать событие change, чтобы перенаправить строку запроса следующим образом:

$("#ID").on("change", function () {
   var selectedId = $(this).val();

   window.location.href = '@Url.Action("getDataBySelectedID", "Sample")' + '?selectedId=' + selectedId;
});

Обратите внимание, что window.location.href использует метод HTTP GET , поэтому целевое действие должно использовать [HttpGet] вместо [HttpPost]:

[HttpGet]
public ActionResult getDataBySelectedID(string selectedId)
{
    var que = test.getHello(selectedId);
    // don't forget to repopulate ViewBag from SelectList here

    return View("Index", que); // return same page with different model contents
}

Убедитесь, что тип возврата метода getHello() совпадает с методом getStuff(), чтобы избежать пропущенных исключений, связанных с элементом модели.

Но если вы хотите отправить форму и показать ее позже, используйте вместо нее $('form').submit():

JQuery

$("#ID").on("change", function () {
   $('form').submit();
});

Контроллер

[HttpPost]
public ActionResult getDataBySelectedID(ViewModel model)
{
    // do something

    return View(model);
}
0 голосов
/ 05 ноября 2018

в getDataBySelectedID возвращают представление, подобное Индексу, который является моделью построения с примененным фильтром и возвращают Представление (модель)

...