2010-01-19 4 views
2

J'ai un asp:DataGrid avec des colonnes gabarit. Voici une de ces colonnes:Le moteur de vue ASP.NET n'exécutera pas mes extraits de code

<asp:TemplateColumn> 
<ItemTemplate> 
<asp:LinkButton ID="btnDetails" 
    Runat="server" 
    CommandName="details" 
    Text="Details" 
    Font-Size="0.8em" 
    CommandArgument='a=<%# Eval("a")%>&amp;b=<%# Eval("b")%>' /> 
<...> 

Lorsque les feux de commande, le CommandArgument revient non évalué - il est la chaîne a=<%# Eval("a")%>&b=<%# Eval("b")%>, pas a=5&b=6 que je veux.

Qu'est-ce qui ne va pas avec ce que je fais?

Répondre

2

Ouais Mitch est correct, si vous voulez une autre façon:

CommandArgument='<%# String.Format("a={0}&b={1}", 
    DataBinder.Eval(Container.DataItem, "a"), 
    DataBinder.Eval(Container.DataItem, "b")) %>' 

DataBind doit être appelé, ou ces substitutions ne se produira pas ...

+0

+1. Je savais qu'il devait y avoir un meilleur moyen! –

+0

+1,000,000 Je vous dois un. J'ai édité le post pour faire quelques corrections de syntaxe. –

1

<%# Eval() %> est une expression de liaison de données. Vous ne pouvez pas le concaténer avec une autre chaîne en dehors de l'expression eval.

+0

Oh. Existe-t-il une alternative qui ferait ce que j'attends d'Eval? –

+0

une option (pas nécessairement la meilleure) serait de créer une propriété sur un objet sous-jacent "CommandArgument" et de l'évaluer. –

+0

J'avais peur que tu dises ça. En ce moment je suis simplement lié à un DataView lié à un stupide StoredProc. Je détesterais toucher ce code ... –