Представление MVC не обновляется после вызова JQuery

StackOverflow https://stackoverflow.com//questions/23010315

Вопрос

Я создаю веб-приложение MVC 5.В шаблоне макета есть раскрывающийся список, содержащий список имен пользователей.Поскольку этот раскрывающийся список находится в шаблоне макета, он доступен во всех представлениях, которые наследуются от шаблона.

Когда пользователь входит на сайт и проходит аутентификацию, он направляется к методу Index в контроллере.Этот метод принимает идентификатор типа int, допускающий значение NULL.Когда пользователь входит в систему, идентификатор, передаваемый методу Index, всегда равен нулю.Затем я получаю идентификатор вошедшего в систему пользователя и делаю запрос, чтобы получить его данные (см. ниже).

    public ActionResult Index(int? id)
    {
        DashboardViewModel model = new DashboardViewModel();

        if(id == null || id == 0)
        {
            User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
            model.SelectedUser = user;
        }
        else
        {
            model.SelectedUser = _userService.GetUserByID(id.Value);
        }

        return View(model);
    }

Я передаю их данные в ViewModel, а затем в представление, которое затем записывает их адрес электронной почты в пользовательский интерфейс.

@model MyApp.UI.ViewModels.DashboardViewModel

<h1>@Model.SelectedUser.email</h1>

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

Процесс работает следующим образом.Пользователь выбирает имя из раскрывающегося списка, вызывается функция JQuery.

$(document).ready(function () {

    $("#UserID").change(GetUser);

    function GetUser() {

        $.ajax({
            type: "GET",
            url: '/Dashboard/Index/',
            data: { id: $(this).val() },
            error: function () {
                alert("An error occurred.");
            },
            success: function () {
                alert("success");
            }
        });
    }
});

Эта функция передает идентификатор из раскрывающегося списка обратно в метод Index в контроллере.На этот раз метод Index понимает, что идентификатор НЕ равен NULL, и поэтому выполняет запрос для получения сведений о выбранных пользователях на основе их идентификатора (см. Метод индекса выше).

Детали снова помещаются в ViewModel и передаются в представление.Модель, переданная в представление, содержит сведения о выбранных пользователях, а затем должна записать их адрес электронной почты в пользовательский интерфейс.

@model MyApp.UI.ViewModels.DashboardViewModel

<h1>@Model.SelectedUser.email</h1>

Однако именно здесь моя проблема.Хотя я могу пройтись по своему коду и увидеть, что все работает как положено, независимо от того, какого пользователя я выбираю из раскрывающегося списка, он никогда не меняет адрес электронной почты, записанный в пользовательском интерфейсе.

Это странно, потому что я вижу, что данные выбранных пользователей передаются в ViewModel, однако пользовательский интерфейс никогда не обновляет адрес электронной почты.

Извиняюсь за длинный пост, но я хотел дать как можно больше подробностей, пытаясь исправить это, поскольку я работаю над этим уже больше дня, но безуспешно.

Любая помощь могла бы быть полезна.

Спасибо.

Это было полезно?

Решение

Насколько я вижу, вы не используете свой $.ajax результат вызова куда угодно.Вы просто показываете Alert и все готово.Вам нужно использовать данные в результате, но поскольку вы возвращаете целое View и не просто PartialView вероятно, лучше просто перенаправить при изменении раскрывающегося списка:

$("#UserID").change(function()
    window.location.href = "/Dashboard/Index/" + $(this).val();
);

Вы также можете использовать @Url.Action("Index", "Dashboard") чтобы избежать жесткого кодирования URL-адреса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top