[jQuery/C#] Dynamic Load ASP.Net User Control

Comment utiliser charger dynamiquement le contrôle utilisateur ASP.NET en utilisant jQuery et Ajax.

 

Pour ce faire, nous devons déclarer une WebMethod côté serveur qui ajoute contrôle utilisateur à un objet de classe Page. Et en utilisant jQuery et Ajax, appelez cette WebMethod et ajoutez la réponse à n'importe quel élément DOM. La réponse sera le contenu du contrôle utilisateur.

 

Déclarer une WebMethod nommée "LoadUserControl". Cette méthode crée un objet de la classe Page, puis ajoute l'objet UserControl à la classe Page. Et puis en utilisant la méthode Server.Execute exécute la page sur le serveur dans le répertoire actuel et reçoit la sortie de la page via l'écrivain d'objet StringWriter. Il écrit le flux HTML reçu du rédacteur dans le flux de sortie HTTP.

 

 

MaPage.aspx.cs

[WebMethod]
public static string LoadUserControl()
{
  using (Page objPage = new Page())
  {
     UserControl uControl =
                         (UserControl)objPage.LoadControl("UserControls/TestUC.ascx");
     objPage.Controls.Add(uControl);
     using (StringWriter sWriter = new StringWriter())
     {
         HttpContext.Current.Server.Execute(objPage, sWriter, false);
         return sWriter.ToString();
     }
  }
}

 

Ci-dessous se trouve le code jQuery pour faire une requête ajax lors d'un clic sur un bouton, puis ajouter la réponse reçue de WebMethod à n'importe quel élément DOM pour restituer le contenu du contrôle utilisateur.

MaPage.aspx

 

<html>
<!-- ... -->
<!-- ... IMPORT JQUERY -->
 <body>
    <div><input type='button' id='btnLoadControl' value='Load' /></div>
    <div id='pnlLoadControl'></div>
  </body>
</html>


$(document).ready(function () {
    $("#btnLoadControl").on("click", function (e) {
        $.ajax({
            type: "POST",
            url: "MaPage.aspx/LoadUserControl",
            data: "",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (r) {
                $("#pnlLoadUControl").append(r.d);
            }
        });
        e.preventDefault();
    });
});