Как обновить содержимое div после перенаправления? - PullRequest
0 голосов
/ 02 января 2012

Это кажется невозможным, но я все равно спрошу. Вот сценарий

У меня есть MVC 3 View, который загружает 3 частичных представления, одно для входа в систему, одно для регистрации и одно для входа в систему OpenID.

Первые 2 прекрасно работают с Ajax; третье представление использует ajax для публикации на моем openid контроллере, где я делаю магию DotNetOpenAuth

Пример:

 var response = authenticationRequest.RedirectingResponse;
                if(response.Status == HttpStatusCode.Redirect)
                {
                    return Json(new {redirectUrl=response.Headers[HttpResponseHeader.Location] });    
                }

Я делаю перенаправление с возвращенного Json с контроллера, на который отправляется форма входа в OpenId, "помните, что это сообщение через ajax". Поэтому после перенаправления я хотел бы заменить содержимое div на начальное частичное представление входа openid новым представлением, основанным на том, что происходит после перенаправления на провайдера, пользователь входит в систему, и я получаю ответ обратно в свой actionMethod , Например, я проверю свою базу данных, чтобы узнать, есть ли у меня учетная запись для этого открытого идентификатора. Если я этого не сделаю, я бы хотел представить пользователю частичное представление с некоторыми основными вопросами и т. Д. И позволить ему добавить учетную запись с открытым идентификатором.

Похоже, что это невозможно, поскольку перенаправление лишает вас возможности вернуть данные на исходную страницу.

Есть идеи?

Обрабатывать пули в соответствии с запросом:

  • Основной вид отображает частичный вид с формой
  • Форма в частичном представлении делает ajax-запись в ActionMethod в контроллере
  • ActionMethod в контроллере возвращает Json с redirectUrl
  • Функция обратного вызова OnSuccess читает результат json и выполняет перенаправление на стороне клиента в redirectUrl
  • Пользователь входит в провайдера openid в перенаправленном местоположении
  • Поставщик OpenId отправляет результаты обратно в тот же ActionMethod, который сгенерировал первоначальный результат Json redirectUrl
  • Выполните поиск в БД по открытому идентификатору и верните частичное представление, если пользователь не найден, или войдите в систему, если пользователь найден.

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

Ответы [ 2 ]

1 голос
/ 04 января 2012

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

У вас есть как минимум две альтернативы:

  1. Просто возьмите полное перенаправление страницы, и когда результат аутентификации вернется от провайдера, ваш контроллер MVC повторно отобразит всю исходную страницу. Недостаток: контроллер не может восстановить какое-либо пользовательское состояние из других представлений, которые были ранее.

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

DotNetOpenAuth поддерживает оба подхода, но, конечно, в контроллере и виде, внешнем по отношению к библиотеке, есть много кода, который вам нужно написать. У меня есть пример, который демонстрирует относительно полированную реализацию # 2. Это было в http://openidux.dotnetopenauth.net/, но сайт, кажется, сейчас не работает. Но вы можете посмотреть скриншот и скачать шаблон проекта для него здесь: http://visualstudiogallery.msdn.microsoft.com/81153747-70d7-477b-b85a-0374e7edabef

0 голосов
/ 02 января 2012

Вы можете просто сохранить данные здесь в сеансе, использовать кеш или использовать TempData.Кэш, разумеется, очистится сам, поэтому обслуживание не требуется.

TempData очистит себя после прочтения.Таким образом, у вас есть несколько вариантов доступа к этим данным снова, даже не сохраняя их в БД.

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