2010-08-30 6 views
3

Je suis suivant cet exemple: http://msdn.microsoft.com/en-us/library/ms178210.aspxcallbacks client Master Pages

Et je peux le faire fonctionner avec juste une seule page et un code derrière, mais quand j'ajoute un masterpage, les exemples ne fonctionne pas correctement. Dans ma page maître, j'ai une section de contenu principal et une section de contenu corporel. Ce n'est rien d'extraordinaire.

Comment effectuer des rappels avec des pages maîtres?

Répondre

-1

Je l'ai eu pour travailler.

Assurez-vous que vous modifiez ce code pour représenter le préfixe MasterPage contentId:

function LookUpStock() 
{ 
    var lb = document.getElementById("MASTERPAGEPREFIX_" + "ListBox1"); 
    var product = lb.options[lb.selectedIndex].text; 
    CallServer(product, ""); 
} 

function ReceiveServerData(rValue) 
{ 
    document.getElementById("MASTERPAGEPREFIX_" + "ResultsSpan").innerHTML = rValue; 
} 
+0

Cette technique n'est pas une bonne idée. À long terme, votre code finira par se briser. Vous devriez utiliser la solution et les conseils offerts par @Rich Andrews. – rtpHarry

1

Une approche plus évolutive serait d'utiliser la syntaxe suivante (remplacer le ResultsSpan par un panneau ASPX aussi) ...

function LookUpStock() 
{ 
    var lb = document.getElementById('<%=ListBox1.ClientID%>'); 
    var product = lb.options[lb.selectedIndex].text; 
    CallServer(product, ""); 
} 

function ReceiveServerData(rValue) 
{ 
    document.getElementById('<%=ResultsSpan.ClientID%>').innerHTML = rValue; 
} 

De cette façon, si le nom (ou la page réelle) de la page MasterPage change le code fonctionnera toujours.

Fondamentalement, le processus ASP.NET analyse la page et remplace les directives <% =%> par le nom correct du contrôle sur le client.

Cette approche fonctionnera également si vous avez des contrôles imbriqués. Dans votre exemple, si un contrôle était imbriqué dans un autre panneau, l'ID affiché ressemblerait à quelque chose comme MASTERPAGEPREFIX_CONTAINERCONTOLNAME_ListBox1 et votre travail échouerait.

En tant que principe général son considéré normalement une mauvaise idée de « coder en dur » ids côté client dans votre balisage - laisser le processus ASP.NET gérer pour vous