ASP.NET MVC Acesso de diálogo modal / lightbox
-
12-09-2019 - |
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.
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>
<% } %>