дотнетопенаут и аякс формы - PullRequest
2 голосов
/ 02 августа 2010

Я пытаюсь реализовать вход в openId с учетной записью Google вместе с ASP.NET MVC 2 framework и библиотекой DotNetOpenAuth.

Следующий код используется для визуализации кнопки входа в систему:

<% using (Html.BeginForm("LogOnPostAssertion", "Authentication", FormMethod.Post, new { target = "_top" })) <br /> { %><br /></p> <blockquote> <p><%= Html.AntiForgeryToken() %><br /> <%= Html.Hidden("ReturnUrl", "/", new { id = "ReturnUrl" }) %><br /> <%= Html.Hidden("openid_openidAuthData") %><br /> <%= Html.OpenIdSelector(this.Page, new SelectorButton[] {<br /> new SelectorProviderButton("<a href="https://www.google.com/accounts/o8/id" rel="nofollow noreferrer">https://www.google.com/accounts/o8/id</a>", AppHelper.ImageUrl("login/google.gif")),<br /> new SelectorOpenIdButton(Url.Content("~/Content/google.gif")) }) %><br /> <% } %><br /> </div><br /> </div><br /> <% var options = new OpenIdSelector();<br /> options.DownloadYahooUILibrary = false;<br /> %><br /> <%= Html.OpenIdSelectorScripts(this.Page, options, null) %><br />

Этот код работает нормально, пока я не хочу использовать AJAX. Я не хочу перезагрузить всю страницу после того, как пользователь вошел в систему. Если я изменяю Html.BeginForm на Ajax.BeginForm, аутентификация перестает работать. Действие «LogOnPostAssertion» не вызывается.

На моем сайте форма входа открывается во всплывающем модальном диалоге. Я хочу проверить пользователя, закрыть диалоговое окно и обновить область статуса пользователя, используя JavaScript. В качестве примера процесс должен быть похож на тот, что был на http://shopping.com

1 Ответ

2 голосов
/ 02 августа 2010

Может быть потому, что когда вы переключили его на AJAX, вы не сохранили метод POST HTTP?

Когда я попытался заменить строку Html.BeginForm на эту, это сработало:

<% using (Ajax.BeginForm("LogOnPostAssertion", "Auth", new AjaxOptions { HttpMethod = "POST" })) { %>

Установив точку останова на действии LogOnPostAssertion, я увидел, что оно работает. Но само действие нужно будет настроить так, чтобы оно не отправляло перенаправления, а скорее отправляло любой подходящий скрипт обновления.

...