2012-02-15 6 views
0

Je développe actuellement une application web et crée des contrôles personnalisés. J'ai créé un "bouton modal" personnalisé, qui hérite d'un contrôle web et INamingContainer, le contrôle utilise des ressources emebedded pour enregistrer le code côté client (FancyBox jQuery), le bouton modal affiche un Iframe dans le modal et fonctionne bien sur un mon Default.aspx page.Contrôle personnalisé avec jquery, que faire ensuite?

Le problème:

J'ai essayé de déclarer un autre contrôle « bouton modal » sur une autre page mais la fenêtre contextuelle modale ne postback. J'ai recherché l'erreur et constaté que le _DoPostBack n'était pas généré sur cette page. donc j'ai ajouté la méthode: this.Page.ClientScript.GetPostBackClientHyperlink (this, "") ;. Cela a généré la fonction _doPostBack et a causé la publication, mais le modal ne s'ouvre pas la deuxième fois!

Heres mon script côté client thats généré dans ma méthode de contrôle personnalisé override CreateChildControls():

 // http://fancybox.net/ 
      StringBuilder jQueryInclude = new StringBuilder(); 
      jQueryInclude.Append("$(document).ready(function() { "); 

      // Uses ".class" selector 
      jQueryInclude.AppendFormat("$('.{0}').fancybox(", this.ModalViewID); 
      jQueryInclude.Append(" { "); 
      jQueryInclude.Append(" 'titlePosition': 'outside',"); 
      jQueryInclude.Append("  'modal': 'true', "); 
      jQueryInclude.Append("  'transitionIn': 'elastic', "); 
      jQueryInclude.Append("  'transitionOut': 'fade', "); 
      jQueryInclude.Append(" }); "); 
      jQueryInclude.Append("});"); 

      var closeMethod = String.Format("{0}_CloseDialog()", close.ClientID); 

      jQueryInclude.Append(" function METHOD_NAME { ").Replace("METHOD_NAME", closeMethod); 
      jQueryInclude.Append(" $.fancybox.close(); "); 
      jQueryInclude.AppendFormat(" __doPostBack('<%= {0} %>', '')", close.ClientID); // Postback on close to reload iframe 
      jQueryInclude.Append(" } "); 

      close.OnClientClick = closeMethod; 
//user preference else all modals will be same 
      Page.ClientScript.RegisterClientScriptBlock(typeof(ModalButton), String.Format("{0}_fancyBox", this.ModalViewID), jQueryInclude.ToString(), true); 

Ce que je dois savoir:

Comment assurer cette coutume "modalbutton" génère la fonction _DoPostBack et ouvre à nouveau quand il a été posté.

Merci à l'avance

Répondre

0

le postback Allume contraignait la page pour générer les ChildControls à nouveau mais sans ModalViewID qui n'a pas été enregistré dans Viewstate de mon contrôle personnalisé, générant ainsi jquery « poney »! Pour résoudre ce problème, j'ai ajouté une simple vérification sur ma méthode create children controls pour retourner si modalviewid == null ou vide, je pourrais aussi assigner mon modalViewID à viewstate.

Merci de toute façon

Questions connexes