2009-09-21 7 views
0

J'espérais créer une boîte de dialogue lightbox/modal pour me connecter à mon site web qui est construit avec asp.net mvc. Cependant, la seule façon dont je peux penser est de mettre de la logique dans les événements onClick pour les liens hypertexte lors de la liaison à des sections restreintes. Je préférerais que je puisse encore utiliser le filtre d'action Authrisation, et lorsque vous cliquez sur un lien vers une méthode d'action qui nécessite l'autorisation, il afficherait le dialogue lightbox/modal avant de passer au lien réel. La raison en est que je ne veux pas préformer la tâche répétitive d'avoir à se rappeler de mettre dans les événements pour les liens. La seule façon d'implémenter ce que je peux penser est de préformer un ajax push/comet du serveur au client pour montrer la boîte dans un filtre d'autorisation avant que le contrôleur continue. Il n'y a pas beaucoup de documentation sur l'exécution d'ajax pushes/comet dans asp.net mvc.Connexion ASP.NET MVC Modal Dialog/lightbox

Existe-t-il un moyen plus simple?

La fenêtre de connexion de digg en est un exemple.

Répondre

2

Utilisez une classe pour décorer des liens vers des actions qui nécessitent une connexion si vous en avez qui le font et d'autres pas, lorsque la requête n'est pas autorisée. Lorsque quelqu'un clique sur un lien nécessitant une autorisation, affichez votre boîte de dialogue modale. Cette boîte de dialogue doit être envoyée à votre action de connexion avec l'URL du lien cliqué comme paramètre returnUrl pour l'action. Si la connexion échoue, rediriger vers la vue de connexion (en ajoutant l'URL de retour à l'action de publication du formulaire de connexion).

Remarque: Cela suppose que vous utilisez la boîte de dialogue jQuery UI, mais n'utilise pas l'interface du bouton de la boîte de dialogue. Vous devrez peut-être ajouter les classes d'interface utilisateur au bouton vous-même pour obtenir le style correct. Si vous n'utilisez pas l'interface utilisateur jQuery, réglez le code de dialogue pour qu'il fonctionne avec vos boîtes de dialogue.

<% 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> 
<% } %> 
+0

90% de ce que j'ai déjà mis en œuvre. Le problème est de décorer les liens, je peux le faire manuellement ce qui serait fastidieux ou déconseiller de travailler si la méthode d'action doit être authentifiée et prendre les mesures appropriées sur le lien. –

+1

Qu'en est-il de la création d'un assistant HTML personnalisé analogue à ActionLink qui vérifie si l'action spécifiée par le paramètre possède l'attribut Authorize et, si c'est le cas, le décore automatiquement avec la classe appropriée? – tvanfosson