2009-04-14 7 views
4

J'essaie de passer plusieurs arguments Eval() à une fonction JavaScript à partir d'un fichier .aspx, mais je continue à recevoir des erreurs de compilation. Je suis nouveau à JavaScript et n'ai jamais vraiment utilisé Eval() avant. Où vais-je mal?Passer plusieurs Eval() à une fonction JavaScript à partir d'ASPX

NB: La ligne ci-dessous est en fait sur une seule ligne, mais est enveloppé pour plus de clarté:

<asp:LinkButton runat="server" Text='<%#Eval("Title")%>' 
    OnClick='javascript:ShowEventDetails' 
    CommandArgument='<%# 
     Eval("EventID").ToString()   & Eval("Title").ToString() & 
     Eval("Location").ToString()   & Eval("StartTime").ToString() & 
     Eval("Description").ToString()  & Eval("Link").ToString() & 
     Eval("ContactFirstName").ToString() & Eval("ContactLastName").ToString() & 
     Eval("ContactEmail").ToString()  & Eval("InsertionTime").ToString() & 
     Eval("EventAdmin").ToString()%>); ' /> 

Y at-il de meilleures façons de le faire? Si c'est vrai, que sont-ils?

+0

Laissez-moi savoir si la réponse que je vous ai donné aidé. –

Répondre

2

OnClick est une propriété du contrôle qui attend une référence à une méthode de gestionnaire d'événements. Mettre JavaScript dans la propriété OnClick ne fonctionnera pas.

Si vous souhaitez exécuter du code JavaScript arbitraire lorsque vous cliquez sur le bouton, utilisez OnClientClick. Je suppose que vous voulez passer les evals en ShowEventDetails comme arguments (formaté pour la lisibilité):

<asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("Title")%>' 
    OnClientClick='ShowEventDetails("<%# Eval("EventID").ToString() %>", 
     "<%# Eval("Title").ToString() %>", 
     "<%# Eval("Location").ToString() %>", 
     "<%# Eval("StartTime").ToString() %>", 
     "<%# Eval("Description").ToString() %>", 
     "<%# Eval("Link").ToString() %>", 
     "<%# Eval("ContactFirstName").ToString() %>", 
     "<%# Eval("ContactLastName").ToString() %>", 
     "<%# Eval("ContactEmail").ToString() %>", 
     "<%# Eval("InsertionTime").ToString() %>", 
     "<%# Eval("EventAdmin").ToString() %>");' /> 

Essentiellement, vous construisez une longue chaîne:

ShowEventDetails('123','Event Title','New York' ... etc ... 

qui est exécutée dans JS lorsque le LinkButton est cliqué .

+0

Merci pour votre réponse. Le compilateur se plaint maintenant que la balise de serveur n'est pas bien formatée. –

+0

@Dhruv OK, cette méthode de construction d'arguments est un peu sujette aux erreurs car il y a tellement d'endroits pour les fautes de syntaxe. Je l'ai refait et vérifié que cela fonctionne. –

+1

@Rex Merci. C'est ce que je reçois de la source de la page. Pensez-vous toujours que nous pouvons contourner cela?

1

La meilleure façon de le faire est de définir la propriété OnClientClick dans le code-behind, comme ceci:

LinkButton lb = new LinkButton(); //Instantiate the linkbutton wherever you need to 

Une fois que vous faites, utilisez String.Format pour mettre vos articles dans la propriété OnClientClick.

lb.OnClientClick = String.Format("javascript:ShowEventDetails 
('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}');", 
    EventID.ToString(), Title.ToString(), Location.ToString(), StartTime.ToString(), 
    Description.ToString(), Link.ToString(), ContactFirstName.ToString(), 
    ContactLastName.ToString(), ContactEmail.ToString(), InsertionTime.ToString(), 
    EventAdmin.ToString()); 
0

Une autre façon de transmettre le paramètre multiple de client aspx, le code de l'échantillon est donnée ci-dessous

Utiliser deux guillemets doubles (+ " """ + Eval ("xxx"). ToString () + « » ») si vous voulez passer un paramètre de chaîne

OnClientClick='<%#"javascript:return OpenDetailsPage(" + Eval("xxx").ToString() + ",""" + Eval("xxx").ToString() + """," _ 
               + Eval("xxx").ToString() + "," + Eval("xxx").ToString() + "," + Eval("xxx").ToString() + "," _ 
               + Eval("xxx").ToString() + ",""" + Eval("xxx").ToString() + """,this);"%> ' 
Questions connexes