Pergunta

Eu estava esperando para criar uma mesa de luz / modal de diálogo para o login no meu site que é construído com asp.net MVC. No entanto, a única maneira que eu posso pensar é colocar lógica para os eventos onclick para os hiperlinks quando ligando para seções restritas. Eu preferiria que então eu ainda poderia usar o filtro de ação Authrisation, e quando você clica em um link para um método de ação que requer authrisation ele iria mostrar o lightbox / modal de diálogo antes de proceder para a ligação efectiva. A razão para isso é que eu não quero pré-forma a tarefa repetive de ter que lembre-se de colocar nos eventos para as ligações.

A única maneira de implementar isso que eu posso pensar é pré-formar um empurrão ajax / cometa do servidor para o cliente para mostrar a caixa em um filtro authrisation antes que o controlador continua. Há também não é muito documention de realizar ajax empurra / cometa em asp.net mvc.

Existe uma maneira simplier?

A janela de login digg é um exemplo disso.

Foi útil?

Solução

Use uma classe para links de decorar para ações que exigem login, se você tem alguns que fazem e alguns que não o fazem, quando o pedido não está autorizado. Quando alguém clica em um link que exija autorização, então aparecer o diálogo modal. Este diálogo deve publicar em seu ação de login com a url real do link clicado definido como o parâmetro returnUrl para a ação. Se o login falhar, redirecionamento para a visão login (anexando o returnUrl à ação post para o formulário de login).

Nota: Isso pressupõe que você está usando o diálogo de jQuery UI, mas não usa interface de botão da caixa de diálogo. Você pode precisar adicionar as classes de interface do usuário para o botão é mesmo para obter o estilo correto. Se você não estiver usando jQuery UI em seguida, ajuste o código de diálogo para o trabalho com os seus diálogos.

<% 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>
<% } %>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top