2010-06-13 9 views
2

Dans une simple page ASPX je peux avoir une postback personnalisée fonction JavaScript comme décrit dans http://www.xefteri.com/articles/show.cfm?id=18 La simple page utilise un linkbutton:ASP.NET comment utiliser __doPostBack à partir de JavaScript personnalisé avec Master/contenu Pages

<asp:LinkButton id="CreateFile" runat="server" onclick="CreateFile_Click" /> 

avec le code derrière qui a le sous-programme VB:

Sub CreateFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 

et une fonction personnalisée Javascript qui fait:

__doPostBack('CreateFile',''); 

Lorsque je déplace le code vers une page de contenu avec une page maître correspondante, l'exemple simple ne fonctionne plus.

Je suis conscient que les ID de contrôle serveur sont modifiés dans le code HTML généré lorsqu'une page maître est impliquée et que j'utilise les ID corrects dans le code JavaScript. Par exemple, pour l'ID LinkButton, j'utilise '<% = CreateFile.ClientID%>' pour le Javascript dans le code HTML généré. Néanmoins, je n'arrive toujours pas à comprendre comment obtenir des publications à partir du Javascript lorsque des pages maîtres sont impliquées. Plus précisément, avec une page principale dans le mix le code ne sera même pas compiler mais les résultats dans:

'CreateFile_Click' is not a member of 'ASP.testmaster_aspx' 

Si je supprime onclick = « CreateFile_Click » du balisage LinkButton il compile mais ne fonctionne pas. Similairement, si onclick est supprimé de la version simplifiée sans page maître, cela ne fonctionne pas non plus, comme prévu.

Toute saisie sur la façon d'obtenir une publication à partir d'une fonction Javascript personnalisée lorsque vous utilisez serait très appréciée.

Répondre

1

êtes-vous en train de coder l'appel à __doPostBack?

essayer d'utiliser Page.GetPostBackEventReference

pour obtenir un handle valide dans votre javascript. Une fois que vous avez écrit une référence d'événement post-retour valide, vous pouvez l'inclure dans une fonction locale, que vous pouvez appeler à partir d'une page maître.

if (window.myPostBackfunction) // check if it exists 
    myPostBackFunction(); 
+0

Je ne voulais pas coder l'appel à __doPostBack et votre pointeur sur GetPostBackEventReference était correct. Merci! – harrije

1

Pour ce faire. Conservez le JavaScript qui appelle la fonction __dopostback dans votre page maître. Sur chaque page qui nécessite l'appel de do post pour rafraîchir les choses automatiquement après un événement, placez un bouton et cachez-le en utilisant "style = display: none" (dans cet exemple, je nomme ce bouton 'btndp') et sur le cliquez sur l'événement de ce bouton asp écrire le code que vous souhaitez exécuter dans le __dopostback. Maintenant nécessite JavaScript ID de l'élément en ASP nécessite le nom de l'élément ainsi dans votre JavaScript à la page principale faire ce

var btnName = $get("content_btndp").name; 
__doPostBack(btnName, ""); 

Vous voyez ici nous avons d'abord eu le nom de l'élément en utilisant l'ID, puis passé le nom la fonction __dopostback. Ainsi, sur chaque page de contenu, vous pouvez mettre un bouton invisible avec le même nom et votre script sur le maître servira tout.

J'espère que cela résout votre problème.