2009-11-10 4 views
3

J'ai un panneau de mise à jour qui contient une table à laquelle j'ajoute des rangées de contrôles en cliquant sur un bouton. L'un des contrôles ajoutés est un contrôle utilisateur et il s'agit d'un outil de sélection de date. À l'intérieur de ce contrôle utilisateur, j'ai une zone de texte, et j'ai JQuery qui lui applique le plugin JPUI UI DatePicker le transformant ainsi en un piqueur de date. Ce n'est pas un problème si ce contrôle utilisateur est chargé dynamiquement sur une page, cependant, s'il est effectué sur des postbacks asynchrones dans un panneau de mise à jour, le javascript ne se déclenche pas et la textbox est donc rendue sans la fonctionnalité jquery datepicker. Voici un code qui est à l'intérieur du DatePicker.ascx:comment exécuter javascript dans le panneau de mise à jour

$(function() { 
     //reset the localization 
     $.datepicker.setDefaults($.extend($.datepicker.regional[''])); 
     $("#<%=txtDate.ClientID%>").datepicker({ dateFormat: 'mm/dd/yy', showOn: 'button', buttonImage: '/images/calendar.gif', buttonImageOnly: true, altField: '#<%=txtDate.ClientID%>' }); 

}

Donc, ce jquery ne se déclenche pas lorsque la commande est chargé dans dynamiquement sur un postback async. Alors, comment puis-je faire ce travail?

Répondre

1

Lorsque vous affichez un script dans une réponse, il ne fait que: afficher le script. C'est lors du rendu de la page que le script est rendu en premier, et cela s'est déjà produit au moment où ce code est en cours d'exécution.

Microsoft a mis au point une solution pour cela, qui est d'enregistrer le bloc de script via ScriptManager.RegisterClientScriptBlock, et le ScriptManager veillera alors à ce que le script soit exécuté après le chargement de la page. Selon votre situation, cela peut être utile ou non. Ou, dans l'intermédiaire: il peut être utile seulement avec un peu de solutions de contournement. De votre commentaire, je peux penser à une solution de contournement que j'ai pu envisager d'utiliser:

Ajoutez une méthode GetClientScript à votre UserControl, où le JavaScript est renvoyé. Si le UserControl est chargé sur un chargement de page normal, vous appelez cette méthode au moment où vous affichez votre script. Si le contrôle est chargé dans une publication UpdatePanel, vous obtenez le scriptbody du contrôle en utilisant cette méthode et l'enregistrez dans le ScriptManager. Dans ce cas, vous devez également renvoyer un paramètre à UserControl et non pour enregistrer à nouveau le script, comme c'est généralement le cas.

+0

Comment faire cela? Ce script fait partie du contrôle utilisateur qui peut ne pas toujours être chargé dans une page avec panneau de mise à jour et gestionnaire de scripts. – Riz

+0

J'ai complètement modifié ma réponse pour répondre à votre demande. J'espère que cela aide –

+0

oui merci, je pense que je vais devoir le faire de cette façon. Le développement Web est toujours aussi nul que jamais. J'aimerais que les choses se jouent bien ensemble. – Riz

0

Est-ce que le DatePicker.ascx insère ce javascript en haut de la page pendant le chargement initial? Et puis cette fonction échoue puisque le datepicker n'est pas encore chargé. Et puis vous chargez la datepicker sur async dans le panneau de mise à jour, mais la fonction n'est pas appelée.

2

Check this Page regard de la session sur DatePicker il est dit que les lingettes de ASP.NET AJAX UpdatePanel les DOM, de sorte que la charge ne se déclenche pas. le message dit que vous pouvez soit, utilisez le gestionnaire EndRequest, ou le raccourci pageLoad, mais je pense que si vous ne pouviez pas enregistrer le javascript avec ScriptManager.

Espérons que cela aide.

+0

merci, mais la méthode pageLoad ne fonctionnera pas car mon javascript fait partie du contrôle de l'utilisateur, et le contrôle de l'utilisateur est chargé dans le panneau de mise à jour. Merci pour l'info cependant, très intéressant. – Riz

Questions connexes