当请求未被授权时,如果您有一些需要登录的操作和一些不需要登录的操作,请使用一个类来装饰需要登录的操作的链接。当有人单击需要授权的链接时,会弹出您的模式对话框。此对话框应发布到您的登录操作,并将单击的链接的实际 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>
<% } %>