2015-12-22 2 views
0

Je commence à utiliser jQuery BlockUI Plugin pour bloquer l'activité des utilisateurs de la page jusqu'à ce que le bouton soit terminé du côté C#/ASP.NET.Comment débloquer une page bloquée avec jquery-blockui?

J'ai donc écrit ceci;

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script> 
<script src="http://malsup.github.io/min/jquery.blockUI.min.js" ></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#MyButtonID').click(function() { 
      $.blockUI({ message: '<h1>Please wait..</h1>' }); 
     }); 
    }); 
</script> 

Comme vous pouvez le voir, c'est un code simple qui bloque l'interface utilisateur lorsque je clique sur asp:button qui ID est MyButtonID jusqu'à ce qu'il termine son processus. Cela fonctionne très bien.

Maintenant, j'essaie de créer une alerte en fonction d'une condition lors de ce processus de clic. Si je comprends bien, maintenant je dois débloquer ma page en premier, montrer l'alerte et la garder bloquée jusqu'à ce que le bouton soit terminé.

Voilà pourquoi je l'ai écrit deux fonctions (peut-être que je peux appeler ces $.unblockUI et $.blockUI directement sans les?) Dans mon côté javascript pour cela;

function UnblockUI() { 
    $.unblockUI(); 
} 
function BlockUI() { 
    $.blockUI({ message: '<h1>Please wait..</h1>' }); 
} 

Pour autant que je cherche, moyen le plus courant d'appeler la fonction Javascript côté serveur utilise la méthode ClientScriptManager.RegisterStartupScript en C#. J'ai donc essayé d'alerter quelque chose sur le côté C# comme exemple avec;

if(condition) 
{ 
    string script = string.Format("alert('{0}');", "Some error message"); 
    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "alert", script, true); 
} 

et cela a fonctionné. Après cela, j'ai essayé de débloquer la page en appelant la fonction UnblockUI de mon côté javascript mais cela ne l'a pas débloqué.

if(condition) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "unblock", "UnblockUI", true); 
    string script = string.Format("alert('{0}');", "Some error message"); 
    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "alert", script, true); 
} 

Si je comprends bien, ce paramètre UnblockUI appelle mon UnblockUI fonction javascript que je défini ci-dessus et cette fonction appelle $.unblockUI(); et débloquer ma page qui est bloqué, mais comme prévu, il ne fonctionnait pas.

Qu'est-ce qui me manque ici? Ou suis-je pas même comprendre que Ce plugin vous permet de simuler le comportement synchrone lors de l'utilisation d'AJAX, sans verrouiller le navigateur phrase?

+0

Je suis _totally_ nouveau sur les scripts côté client. N'hésitez pas à rétrograder tout ce que vous voyez comme un "élément de base peut être trouvé sur Google" ou "RTFM" ou des choses complètement illogiques, etc –

+0

Vous bloquez la page entière? De plus, êtes-vous en mesure d'envoyer une requête ajax au serveur au lieu d'utiliser la fonctionnalité du bouton asp par défaut? Cela rendra ce que vous essayez de faire très facile à cause des rappels. –

+0

@MarkC. Oui. Sur la documentation, il est dit: _Usage est très simple; bloquer l'activité de l'utilisateur pour la page '$ .blockUI();' _. [Blocage d'élément] (http://jquery.malsup.com/block/#element) est différent pour autant que je vois. Êtes-vous capable d'envoyer une requête ajax? Comment puis-je faire exactement cela? Vous voulez dire dans la déclaration «si»? –

Répondre

1

Essayez d'utiliser l'appel de fonction comme suit:

function unblockUI() { 
    $(function() { 
     $.unblockUI(); 
    }); 
} 


function blockUI() { 
    $(function() { 
     $.blockUI({ message: '<h1>Please wait..</h1>' }); 
    });  
} 

J'espère avoir aidé ...

0

Voici ce que je me sers dans mon projet en cours.

$(document).ready(function() { 

     // unblock when ajax activity stops when DOM gets updated, means Ajax is completed 
     $(document).ajaxStop($.unblockUI); 

     //Block when trying for Ajax Activity 
     $('ul#Appdropdown').click(function (ev) { 

      $.blockUI(); 

     //Add ajax call to get data 
     } 
}); 

Mettez en œuvre le même et il fera le bloc et débloquer pour vous.

+0

vous pourriez vous l'ajaxStart à blockui aussi? non ? –

+0

@LaurentLequenne Pardonnez-moi !! Je n'ai pas compris ce que tu voulais dire? – Lara

+1

Ne vous inquiétez pas ... Blagues :) Si vous utilisez le gestionnaire par défaut AjaxStop pour arrêter le BlockUI, vous pouvez le faire pour le gestionnaire AjaxStart ... Certainement si vous utilisez le BlockUI par défaut. –