2009-05-14 6 views
3

Tout d'abord, je suis un n00b asp.net, si nue avec moi. :)asp: contrôle DataList avec asp: LinkButton à l'intérieur - quelque chose de bizarre

Je travaille sur des exemples dans un livre essayant d'apprendre ASP.NET, et je suis tombé sur quelque chose d'étrange là-dedans. Tout d'abord, si je le tape comme il est écrit dans le livre, VS me donne des erreurs. Ceci est le code tel qu'il est écrit dans le livre:

<asp:DataList ID="employeesList" runat="server"> 
    <ItemTemplate> 
     <asp:Literal ID="extraDetailsLiteral" runat="server" EnableViewState="false" /> 
     Name: <strong><%#Eval("Name") %></strong><br /> 
     Username: <strong><%#Eval("Username") %></strong><br /> 
     <asp:LinkButton ID="detailsButton" runat="server" Text=<%#"View more details about " + Eval("Name")%> 
      CommandName="MoreDetailsPlease" 
      CommandArgument=<%#Eval("EmployeeID")%> /> 
    </ItemTemplate> 
    <SeparatorTemplate> 
     <hr /> 
    </SeparatorTemplate> 
</asp:DataList> 

Alors, je l'ai cueilli à elle pendant un certain temps, et est venu avec cette solution qui compile en fait:

<asp:DataList ID="employeesList" runat="server" onitemcommand="employeesList_ItemCommand"> 
    <ItemTemplate> 
     <asp:Literal ID="extraDetailsLiteral" runat="server" EnableViewState="false" /> 
     Name: <strong><%#Eval("Name") %></strong><br /> 
     Username: <strong><%#Eval("Username") %></strong><br /> 
     <asp:LinkButton ID="detailsButton" runat="server" Text='View more details about <%# Eval("Name") %>' 
      CommandName="MoreDetailsPlease" CommandArgument='<%Eval("EmployeeID") %>' /> 
    </ItemTemplate> 
    <SeparatorTemplate> 
     <hr /> 
    </SeparatorTemplate> 
</asp:DataList> 

Notez que je J'ai également ajouté OnItemCommand dans la balise asp: DataList, maintenant je suis capable de déclencher l'événement comme prévu. Cependant, les résultats dans le navigateur ne sont pas ce que je m'attendais à obtenir; le nom et nom d'utilisateur figurant dans fort texte montrent très bien, mais le contrôle littérales qui devrait montrer des détails supplémentaires (le champ EmployeeID) et le champ Nom intérieur du LinkButton ne montreront pas leurs valeurs dans la page:

not showing as expected http://lh6.ggpht.com/_x84bQLYH57A/SgxzygartcI/AAAAAAAAAIY/nhT-6RUJa6o/s144/EmployeeDirectory_notshowing.jpg

il devrait dire « EmployeeID: 1 » et « Voir plus de détails sur Zak Ruvalcaba »

donc je suppose que c'est la fonction Eval qui ne fonctionne pas lorsque dans un autre contrôle, quelqu'un peut me aider?

Merci d'avance!

Répondre

3

Modifier le LinkButton comme:

<asp:LinkButton ID="detailsButton" runat="server" 
    Text='<%# Eval("Name", "View more details about {0}") %>' 
    CommandName="MoreDetailsPlease" 
    CommandArgument='<%# Eval("EmployeeID") %>' /> 

Désolé je confondais l'ordre des paramètres. J'ai mis à jour ma réponse. Le format doit être le deuxième paramètre.

+0

Cette solution provoque le blocage de l'application, indiquant que DataBinding: 'System.Data.Common.DataRecordInternal' ne contient pas de propriété portant le nom 'Afficher plus de détails sur {0}'. Pourriez-vous regarder à nouveau? J'espère que c'est la façon de le faire, car il semble assez élégant. :) – tplive

+0

Un demi-point pour repérer le # manquant dans le CommandArgument ..;) – tplive

+0

Je donne à votre solution mise à jour la réponse car c'est IMHO le plus élégant. Mais TheTXI a aussi un point de vue intéressant, alors je l'ai surclassé. J'espère que je fais cela correctement, je suis nouveau à SO! Merci les gars, pour vos réponses! – tplive

1

Vous pouvez voir une autre question que j'ai posté hier au sujet de quelque chose étrangement similaire ici:

Need help with Eval inside DataList

Je ne crois Canavar a effectivement donné la bonne réponse, cependant.

+0

Votre lien était intéressant, je n'avais aucune idée que le retour d'Eval était un Objet, mais quand j'ai appliqué votre solution, comme ceci: Texte = '<% # "Voir plus de détails sur" + Eval ("Name"). ToString() + ""%>' fonctionne comme un charme! – tplive

+0

tplive: n'hésitez pas à voter pour moi (et peut-être ma question originale aussi) si cela a aidé :) – TheTXI

Questions connexes