ASP.NET MVC登录模式对话框/灯箱

时间:2009-09-21 11:34:29

标签: asp.net-mvc login modal-dialog lightbox

我希望创建一个灯箱/模态对话框,用于登录我的网站,该网站是用asp.net mvc构建的。但是,我能想到的唯一方法是在链接到受限制的部分时将逻辑放入超链接的onClick事件中。我更喜欢它,所以我仍然可以使用Authrisation动作过滤器,当你点击一个需要authrisation的动作方法的链接时,它会在进入实际链接之前显示lightbox / modal对话框。这样做的原因是我不想预先形成必须记住链接事件的重复性任务。

实现这一点我能想到的唯一方法是从服务器到客户端执行ajax push / comet,以便在控制器继续运行之前在authrisation过滤器中显示该框。在asp.net mvc中执行ajax推送/彗星的文档也不多。

有简单的方法吗?

digg登录窗口就是一个例子。

1 个答案:

答案 0 :(得分:2)

当请求未获得授权时,使用类来装饰指向需要登录的操作的链接(如果您有某些操作,而某些操作则不需要登录)。当有人单击需要授权的链接时,弹出模态对话框。此对话框应发布到您的登录操作,并将链接的实际URL单击设置为操作的returnUrl参数。如果登录失败,请重定向到登录视图(将returnUrl附加到登录表单的post操作)。

注意:这假设您使用的是jQuery UI对话框,但不使用对话框的按钮界面。您可能需要自己将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>
<% } %>