Accueil > > > WEBSERVICES + AJAX = UNE BONNE MÉTHODE POUR BANIR L'AUTOPOSTBACK ET AUGMENTER LA PERFORMANCE DE VOS PAGES
WEBSERVICES + AJAX = UNE BONNE MÉTHODE POUR BANIR L'AUTOPOSTBACK ET AUGMENTER LA PERFORMANCE DE VOS PAGES
Information sur la source
Description
Une expérience que j'aimerais partager avec vous c'est celle de devoir supprimer un AutoPostBack sur une première DropDownList (DDL) qui fesait en sorte de remplir une autre DropDownList selon le choix de la première (il existe un lien 1 -> 0-N : c'est à dire que le faite de sélectionner une option dans le premier DDL généré 0 ou N options sur le 2eme DDL)
Source
- /// <summary>
- /// Description du WebService qui va récupérer les options du 2eme DDL
- /// PS: lors de la création du webService via Visual Studio, ajouté à la main le ///[System.Web.Script.Services.ScriptService]
- /// </summary>
- [WebService(Namespace = "http://tempuri.org/")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- [System.Web.Script.Services.ScriptService]
- public class GetDDL2Options : System.Web.Services.WebService {
-
- public GetDDL2Options () {
-
- //Supprimez les marques de commentaire dans la ligne suivante si vous utilisez des composants conçus
- //InitializeComponent();
- }
-
- [WebMethod]
- public string[] GetListOptionsDDL2(int iIDOptionDDL1)
- {
- //PS : le DDL1 contient des objetcs que je nommerais oDDL1Object
- // de même le DDL 2 : oDDL2Object
- oDDL1Object o_DDL1 = new oDDL1Object();
- List<string> items = new List<string>();
- o_DDL1.ID = iIDOptionDDL1;
- //DDL2DB : classe de app_Code, qui interfere avec la Data Base afin de
- // récupérer les objects en base de la DDL2 correspondant à un object
- // de la DDL1 (il existe une clé étrangère)
- ArrayList o_DDL2ObjectList = DDL2DB.GetDDL2ObjectsListForDDL2Object(o_DDL1);
- foreach (oDDL2Object oddl2 in o_DDL2ObjectList)
- {
- items.Add(oddl2.ID.ToString());
- }
-
- return items.ToArray();
- }
-
- }
-
- //Sur la page aspx il faut absolument insérer le ScriptManager de la façon suivante :
-
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- <Services>
- <!-- remplacez par le chemin de votre WebService -->
- <asp:ServiceReference Path="~local/GetDDL2Options.asmx" />
- </Services>
- </asp:ScriptManager>
-
- //à insérer dans la page concerné :
- <script type="text/javascript" language="javascript">
- function GetDDL2ObjectsServiceJS()
- {
- var webServicePath='~local/GetDDL2Options.asmx';
- var webMethod='GetListOptionsDDL2';
- var iId1 = $get('<%=ddl_1.ClientID %>').selectedIndex;
- Sys.Net.WebServiceProxy.invoke(webServicePath,
- webMethod, false,{"iIDOptionDDL1" : iId1}, OnSucceeded,
- OnFailed,"User Context",1000000);
-
- }
-
- function OnSucceeded(result, eventArgs)
- {
- // on ajoute
- AddItem('<%=ddl_2.ClientID%>',result,result);
- }
-
- // le web service echoue.
- function OnFailed(error)
- {
- // affiche l'erreur.
- //lbl2 erreur permet juste de visualiser l'erreur
- var RsltElem = document.getElementById("lbl2Error");
- RsltElem.innerHTML = "WebService Error: " + error.get_message();
- }
-
- //KD 22/04/2009 - Permet d'ajouter un element un une dropdownlist existante
- function AddItem(DDL,Text,Value)
- {
- var lg = 0;
- lg = document.getElementById(DDL).length;
- var i=0;
- var reg = new RegExp("[,;]+", "g");
- var tableauDDL2 = Text.toString().split(reg);
-
- //On remet a zero la taille du select puis on ajoute une option vide
- document.getElementById(DDL).length = 0;
- var opt = document.createElement("option");
- document.getElementById(DDL).options.add(opt);
- opt.text = "";
- opt.value = "";
-
-
-
- for (var j=0; j<tableauDDL2.length; j++) {
- var opt = document.createElement("option");
- document.getElementById(DDL).options.add(opt);
- opt.text = tableauDDL2[j];
- opt.value = tableauDDL2[j];
- }
- }
-
- //Fonction récupérant la valeur de l'option du DDL2 sélectionné
- function RecupIDDDL2() {
- var iId2 = document.getElementById("ddl_2").value;
- //un champ caché permet de récupérer la valeur sélectionné
- // dans le 2eme DDL pour le récupérer lors de la validation
- // du formulaire
- $('hf_idDDL2').value = iId2;
- }
- </script>
-
- //Dernière chose : entourer votre première DDL par un TD et sur son onClick appelé la //fonction JS :
- <td onclick="GetDDL2ObjectsServiceJS();">DDL1 *
- <asp:DropDownList ID="ddl_1" runat="server">
- </asp:DropDownList>
-
- </td>
-
- //Le ddl_2, le lbl2Error et le champ caché :
- //PS : le DropDownList est au faite un select (c'est plus adapté qu'un composant .NET)
- <td>DDL2 *
- <select id="ddl_Sillons" name="ddl_2" runat="server" onclick="RecupIDDDL2()">
- </select>
- <input type="hidden" name="hf_idDDL2" id="hf_idDDL2" runat="server" />
- <asp:Label ID="lbl2Error" runat="server"></asp:Label>
- </td>
/// <summary>
/// Description du WebService qui va récupérer les options du 2eme DDL
/// PS: lors de la création du webService via Visual Studio, ajouté à la main le ///[System.Web.Script.Services.ScriptService]
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class GetDDL2Options : System.Web.Services.WebService {
public GetDDL2Options () {
//Supprimez les marques de commentaire dans la ligne suivante si vous utilisez des composants conçus
//InitializeComponent();
}
[WebMethod]
public string[] GetListOptionsDDL2(int iIDOptionDDL1)
{
//PS : le DDL1 contient des objetcs que je nommerais oDDL1Object
// de même le DDL 2 : oDDL2Object
oDDL1Object o_DDL1 = new oDDL1Object();
List<string> items = new List<string>();
o_DDL1.ID = iIDOptionDDL1;
//DDL2DB : classe de app_Code, qui interfere avec la Data Base afin de
// récupérer les objects en base de la DDL2 correspondant à un object
// de la DDL1 (il existe une clé étrangère)
ArrayList o_DDL2ObjectList = DDL2DB.GetDDL2ObjectsListForDDL2Object(o_DDL1);
foreach (oDDL2Object oddl2 in o_DDL2ObjectList)
{
items.Add(oddl2.ID.ToString());
}
return items.ToArray();
}
}
//Sur la page aspx il faut absolument insérer le ScriptManager de la façon suivante :
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<!-- remplacez par le chemin de votre WebService -->
<asp:ServiceReference Path="~local/GetDDL2Options.asmx" />
</Services>
</asp:ScriptManager>
//à insérer dans la page concerné :
<script type="text/javascript" language="javascript">
function GetDDL2ObjectsServiceJS()
{
var webServicePath='~local/GetDDL2Options.asmx';
var webMethod='GetListOptionsDDL2';
var iId1 = $get('<%=ddl_1.ClientID %>').selectedIndex;
Sys.Net.WebServiceProxy.invoke(webServicePath,
webMethod, false,{"iIDOptionDDL1" : iId1}, OnSucceeded,
OnFailed,"User Context",1000000);
}
function OnSucceeded(result, eventArgs)
{
// on ajoute
AddItem('<%=ddl_2.ClientID%>',result,result);
}
// le web service echoue.
function OnFailed(error)
{
// affiche l'erreur.
//lbl2 erreur permet juste de visualiser l'erreur
var RsltElem = document.getElementById("lbl2Error");
RsltElem.innerHTML = "WebService Error: " + error.get_message();
}
//KD 22/04/2009 - Permet d'ajouter un element un une dropdownlist existante
function AddItem(DDL,Text,Value)
{
var lg = 0;
lg = document.getElementById(DDL).length;
var i=0;
var reg = new RegExp("[,;]+", "g");
var tableauDDL2 = Text.toString().split(reg);
//On remet a zero la taille du select puis on ajoute une option vide
document.getElementById(DDL).length = 0;
var opt = document.createElement("option");
document.getElementById(DDL).options.add(opt);
opt.text = "";
opt.value = "";
for (var j=0; j<tableauDDL2.length; j++) {
var opt = document.createElement("option");
document.getElementById(DDL).options.add(opt);
opt.text = tableauDDL2[j];
opt.value = tableauDDL2[j];
}
}
//Fonction récupérant la valeur de l'option du DDL2 sélectionné
function RecupIDDDL2() {
var iId2 = document.getElementById("ddl_2").value;
//un champ caché permet de récupérer la valeur sélectionné
// dans le 2eme DDL pour le récupérer lors de la validation
// du formulaire
$('hf_idDDL2').value = iId2;
}
</script>
//Dernière chose : entourer votre première DDL par un TD et sur son onClick appelé la //fonction JS :
<td onclick="GetDDL2ObjectsServiceJS();">DDL1 *
<asp:DropDownList ID="ddl_1" runat="server">
</asp:DropDownList>
</td>
//Le ddl_2, le lbl2Error et le champ caché :
//PS : le DropDownList est au faite un select (c'est plus adapté qu'un composant .NET)
<td>DDL2 *
<select id="ddl_Sillons" name="ddl_2" runat="server" onclick="RecupIDDDL2()">
</select>
<input type="hidden" name="hf_idDDL2" id="hf_idDDL2" runat="server" />
<asp:Label ID="lbl2Error" runat="server"></asp:Label>
</td>
Conclusion
Le contenu du code n'est pas une partie de plaisir mais il reste indispensable pour les alliés de la performance.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Paths et WebServices [ par jdaviaud ]
J'ai un phénomène que je n'arrive pas à comprendre.j'ai un WebService qui fait une requete SELECT dans une base Access et qui m'affiche le résultat da
c# et javascript [ par kach23 ]
j'aimerais savoir si il est possible dans une page web d'appeler a partir d'un script c# une fonction javascript.je sais que c'esrt possible de lancer
Utiliser des variables javascript dans aps.net [ par etnac ]
Je m'explique un peu plus que dans le titre.J'ai dans une page une datagrid dans laquelle je gère un évènement qui me supprime la ligne selectionnée.
Performance : ODBC ou OleDb [ par gog ]
Bonjour à tous,J'utilise une bdd Access, quels drivers donnent les meilleurs performances ODBC ou OleDb,Merci d'avance
optimisation bases de données [ par happyfish ]
Je fait une appli ki transfere les données d'une base vers une autre. Je voulais savoir quel est le meilleur moyen pour les insertions/updates de la n
gestion d'une liste de selection en javascript [ par cedre ]
bonjour,est-il possible de supprimer un ou plusieurs éléments sélectionnés dans une liste de sélection exemple de récupération d'un élément sélectionn
Webservices et SSL [ par maevacmoi ]
Hello !J'ai une application cliente qui utilise des webservices. Je voudrais que les échanges entre le client et le serveur soient "sécurisés".J'ai es
Javascript et ASP.NET [ par Alex009 ]
BonjourJ'aimerai effectué une sommation de la valeur de deux champs(TextBox1 et TextBox2) de mon formulaire en ASP.NET, avec une fonction de JavaScrip
Développer un site web en csharp ? [ par boliv ]
Salut à tous,Pour des besoins professionnels, je dois m'autoformer à .Net, asp.net et c# dans le but de construire des sites. Il y a quelques années,
Menu javascript et Dropdownlist [ par oulaich ]
SltMon menu apprait en dessous de mes dropdownlist, y a t'il une solution pour empêcher cela?Merci.Cela m'est indéférent.
|
Derniers Blogs
WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVéTECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVé par ROMELARD Fabrice
Speaker : Guillaume Rochette Cette session est dédiée à fournir le retour sur la mise en place d'un cloud privé (IaaS) par Osiatis pour son compte ou celui de ses clients. Ce projet s'est déroulé sur 4 mois et a permis de faire évoluer...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|