Les événements JQuery ne fonctionnent pas avec les vues partielles ASP.NET MVC

J’essaie de faire en sorte que les événements JQuery fonctionnent avec des vues partielles dans ASP.NET MVC. Cependant, après avoir chargé une vue partielle via Ajax, JQuery semble incapable de déclencher des événements pour aucun des éléments de la vue partielle. Je soupçonne que ce problème se produira également si vous utilisez d’autres frameworks ou bibliothèques JavaScript pour charger du code html partiel avec Ajax.

Par exemple, considérons l’exemple suivant:

Manette:

public class TestController : Controller { public ActionResult Index() { return View(); } public ActionResult LoadPartialView() { return View("PartialView"); } } 

Index.aspx

   $(document).ready(function() { $("#button").click(function() { alert('button clicked'); }); });  
Click to load partial view.


PartialView.ascx

 
Click to display a javascript message.

Une fois la page chargée pour la première fois, vous pouvez cliquer sur “Cliquez ici pour afficher un message Javascript” et vous obtiendrez un message d’alerte Javascript indiquant “bouton cliqué”. Cependant, une fois que vous avez cliqué sur “Cliquez ici pour charger la vue partielle”, un clic sur le bouton censé afficher le message d’alerte Javascript n’a aucun effet. Il semble que l’événement ‘clic’ ne soit plus déclenché.

Quelqu’un sait-il pourquoi ce problème se produit avec JQuery et comment le résoudre? Ce problème se produit également avec d’autres plug-ins JQuery qui utilisent des événements.

J’ai trouvé une solution :

Juste essayer de faire:

 $(document).on("click", "YOUR_SELECTOR", function(e){ /// Do some stuff ... }); 

Au lieu de :

 $("YOUR_SELECTOR").on("click", function(e){ /// Do some stuff ... }); 

Le moyen le plus simple de gérer cela serait d’utiliser la méthode live ():

  
  

Ce qui fonctionne aussi pour moi, c’est de placer les éléments jQuery dans une vue partielle. Assurez-vous simplement que seuls les contrôles de la vue chargée sont référencés, sinon vous pouvez obtenir un gestionnaire enregistré deux fois pour un contrôle.

PartialView.ascx:

 
Click to display a javascript message.

Aucune de ces solutions ne fonctionnait pour moi, donc je devais faire ces choses pour travailler:

  1. J’ai créé une vue partielle et mis toutes mes références JavaScript dans ce fichier.
  2. J’ai créé une div comme ça
 
@Html.Partial("[Your_Path]")

3.Quand je charge une page partielle après cela, je le fais en JavaScript:

 $('#js').load('/Your_Controller/Your_Partial_function');