ASP.NET MVC Login Модальный диалог / лайтбокс - PullRequest
0 голосов
/ 21 сентября 2009

Я надеялся создать лайтбокс / модальное диалоговое окно для входа на мой сайт, созданный с помощью asp.net mvc. Однако единственный способ, который я могу придумать, - это вставить логику в события onClick для гиперссылок при ссылках на ограниченные разделы. Я бы предпочел, чтобы я все еще мог использовать фильтр действий Authrisation, и когда вы нажимаете ссылку на метод действия, требующий авторизации, он отображает диалоговое окно лайтбокс / модальный режим, прежде чем перейти к действительной ссылке. Причина этого в том, что я не хочу, чтобы заранее выполнялось повторяющееся задание, состоящее в том, чтобы запоминать события в ссылках.

Единственный способ реализовать это, о котором я могу подумать, - это предварительно сформировать ajax push / комету с сервера на клиент, чтобы показать окно в фильтре авторизации, прежде чем контроллер продолжит работу. В asp.net mvc также не так много документов о выполнении ajax pushes / comet.

Есть ли более простой способ?

Примером может служить окно входа в систему digg.

1 Ответ

2 голосов
/ 21 сентября 2009

Используйте класс для оформления ссылок на действия, требующие входа в систему, если у вас есть те, которые делают, а некоторые нет, когда запрос не авторизован. Когда кто-то нажимает на ссылку, требующую авторизации, появляется всплывающее диалоговое окно. В этом диалоговом окне должно быть опубликовано действие входа в систему с фактическим URL-адресом нажатой ссылки, установленным в качестве параметра returnUrl для действия. Если вход в систему не удается, перенаправьте в представление входа в систему (добавив returnUrl к действию post для формы входа в систему).

Примечание. Предполагается, что вы используете диалоговое окно jQuery UI, но не используете интерфейс кнопок диалога. Возможно, вам придется добавить классы пользовательского интерфейса к кнопке, чтобы получить правильный стиль. Если вы не используете jQuery UI, настройте код диалога для работы с вашими диалогами.

<% if (!Request.IsAuthenticated) { %>
$(function() {
    $('#loginDialog').hide().dialog({
         modal: true,
         ...
    });
    $('a.requires-login').click( function() {
         returnUrl = $(this).attr('href');
         $('#loginDialog').find('#returnUrl').val(returnUrl);
         $('#loginDialog').dialog('open');
         return false;
    });
<% } %>

<% if (!Request.IsAuthenticated) { %>
<div id="loginDialog">
    <% using (Html.BeginForm("Login","Account")) { %>
         <%= Html.TextBox( "returnUrl", null, new { style = "display: none;" } ) %>
         ... rest of form ...
    <% } %>
</div>
<% } %>
...