0

我希望创建一个灯箱/模式对话框来登录我的网站,该网站是用 asp.net mvc 构建的。但是,我能想到的唯一方法是在链接到受限部分时将逻辑放入超链接的 onClick 事件中。我更喜欢它,所以我仍然可以使用授权操作过滤器,当您单击需要授权的操作方法的链接时,它会在继续执行实际链接之前显示灯箱/模式对话框。这样做的原因是我不想执行重复任务,即必须记住为链接添加事件。

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

有没有更简单的方法?

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

4

1 回答 1

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>
<% } %>
于 2009-09-21T12:12:23.880 回答