ASP.NET MVC3: как перенаправить на представление, когда сообщение было сделано с использованием AJAX? - PullRequest
3 голосов
/ 11 апреля 2011

У меня есть вид поиска, который использует AJAX для отправки запроса на сервер.В зависимости от объекта ответа, возвращаемого хранилищем, в окне поиска (представление, из которого был отправлен запрос) должно отображаться диалоговое окно (заполненное данными с использованием объекта Json), или пользователь должен быть перенаправлен в представление результатов (заполненноес данными из ответа, переданного как модель представления).

Теперь мне сказали (и испытали), что нельзя перенаправить, когда сообщение было сделано с использованием AJAX.Так есть ли способ перенаправить в другое представление и передать модель представления, если этот ответ был получен из репозитория, и просто отправить обратно объект Json, если должен быть показан результат диалога.

Мое действие контроллера, которое получаетотправленный поисковым представлением в настоящее время выглядит примерно так:

    [HttpPost]
    public ActionResult SomeAction(SearchRequest reqData)
    {
        ResponseBase response = worker.PerformSearch(reqData);

        if (response is ViewResponse)
        {
            //Redirect to "AnotherView" and pass response as the view model.
            return View("AnotherView", response as ViewResponse);
        }
        else if (response is DialogResponse)
        {
            //Return the Json object.
            return Json(new { type = "dialogresponse", data = response });
        }
        else
        {
            //To do: Put error handling code here.
            throw new NotImplementedException();
        }
    }

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Этот вопрос немного устарел, но я подумал, что предложу свой вклад. У меня была похожая ситуация, когда мне приходилось делать пост и либо заполнять какой-то html на странице содержимым обновления, либо перенаправлять пользователя в новое место. Однако, вероятно, есть лучшие способы сделать это, но это то, что я сделал. Если вы используете jQuery для выполнения поста, он достаточно умен, чтобы посмотреть на тип контента ответа; чтобы вернуть представление, просто сделайте, как вы сейчас, и в функции успеха заполните содержимое. Если вы хотите перенаправить пользователя

        string javascript = "window.location.href='{0}';";
        return JavaScript(string.Format(javascript, returnUrl));

Инфраструктура mvc присоединит тип mime javascript к ответу, jQuery подхватит его, выполнит javascript и перенаправит пользователя Единственная загвоздка в том, что в вашем методе успеха будет вставлен javascript в html-контент. Чтобы преодолеть это, запросите тип контента для html, сравнявшись с множителем здесь

0 голосов
/ 11 апреля 2011

Я бы посоветовал вам разделить его на два вызова. В первом вызове AJAX проверьте, является ли это ViewResponse или DialogResponse. Если ViewResponse выполняет еще один AJAX-вызов для получения фактического объекта результата, в противном случае следует выполнить не-AJAX-серверный вызов для перенаправления в новое представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...