jeudi 17 septembre 2009

[Sharepoint|Webpart]Un seul PostBack possible après un clic sur un bouton ?

Voici mon problème, j’ai une webpart de téléchargement avec un filtre (checkboxlist) et un bouton.
Je sélectionne des items et clicque sur le bouton, ce qui me permet de télécharger un fichier correspondant au filtre.

Mais si je fais une nouvelle sélection et reclique sur le bouton rien ne se passe.

En cherchant dans divers forums, je trouve cette solution :

   1: Button buttonExporter = new Button()



   2:             {



   3:                 Text = "Exporter",



   4:                 ValidationGroup = this.ID,



   5:                 OnClientClick = "this.form.onsubmit = function() {return true;}" //supprime le handler gener sur le onsubmit quand le bouton est cliqué, ainsi, la webpart ne freeze pas



   6:                 



   7:             };




Ca à l’air de fonctionner mais non, un beau jour ça ne fonctionne plus.



J’ai donc cherché et je me suis rapproché du problème des UpdatePanel dans les WebParts: Integrating ASP.NET AJAX with SharePoint


Walkthrough: Creating a Basic ASP.NET AJAX-enabled Web Part


Ce qui m’a donné l’idée d’essayer sur mon problème.



J’ai donc créé (fortement inspiré de la MSDN) une méthode qui permet de modifier le comportement du postback de MOSS :





   1: internal static void RegisterHandlerFixup(Page page)



   2:         {



   3:  



   4:             Type cstype = page.GetType();



   5:             // Référence au ClientScriptManager de la page.



   6:             ClientScriptManager cs = page.ClientScript;



   7:  



   8:             if (page.Form != null)



   9:             {



  10:                 // Verifie si le script est deja enreg



  11:                 if (!cs.IsClientScriptBlockRegistered(cstype, "ExportHandlerFixUp"))



  12:                 {



  13:                     if (page.Form.Attributes["onsubmit"] == "return _spFormOnSubmitWrapper();")



  14:                     {



  15:                         page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";



  16:                     }



  17:                 }



  18:                 cs.RegisterStartupScript(cstype, "ExportHandlerFixUp", "_spOriginalFormAction = document.forms[0].action; _spSuppressFormOnSubmitWrapper=true;", true);



  19:             }



  20:             



  21:         }




J’appelle cette méthode dans mon control et tout fonctionne, je peux faire autant de postback que je le souhaite et jusqu’à aujourd’hui, je n’ai vu aucun effet de bord.




Aucun commentaire:

Enregistrer un commentaire