J'utilise la nouvelle fonctionnalité de routage dans ASP.NET 4 (formulaires Web, pas MVC). Maintenant j'ai un asp: ListView qui est lié à une source de données. L'une des propriétés est un ClientID
que je souhaite utiliser pour lier les éléments ListView à une autre page. Dans global.asax
J'ai défini un itinéraire:Comment créer des RouteUrls avec des paramètres de databound de manière déclarative?
System.Web.Routing.RouteTable.Routes.MapPageRoute("ClientRoute",
"MyClientPage/{ClientID}", "~/Client.aspx");
de telle sorte que, par exemple http://server/MyClientPage/2
est une URL valide si ClientID = 2 existe.
Dans les articles ListView J'ai un asp: HyperLink pour que je puisse créer le lien:
<asp:HyperLink ID="HyperLinkClient" runat="server"
NavigateUrl='<%# "~/MyClientPage/"+Eval("ClientID") %>' >
Go to Client details
</asp:HyperLink>
Bien que cela fonctionne, je préférerais utiliser le RouteName au lieu de la route hardcoded en utilisant une expression de RouteUrl. Par exemple, avec une constante ClientID = 2 Je pourrais écrire:
<asp:HyperLink ID="HyperLinkClient" runat="server"
NavigateUrl="<%$ RouteUrl:ClientID=2,RouteName=ClientRoute %>" >
Go to Client details
</asp:HyperLink>
Maintenant, je me demande si je peux combiner la syntaxe d'expression de l'itinéraire et la syntaxe de liaison de données. Fondamentalement, j'aime remplacer la constante 2
ci-dessus par <%# Eval("ClientID") %>
. Mais faire cela d'une manière naïve ...
<asp:HyperLink ID="HyperLinkClient" runat="server"
NavigateUrl='<%$ RouteUrl:ClientID=<%# Eval("ClientID") %>,RouteName=ClientRoute %>' >
Go to Client details
</asp:HyperLink>
... ne fonctionne pas: <%# Eval("ClientID") %>
n'est pas évaluée mais considérée comme une chaîne. Jouer avec plusieurs saveurs de guillemets n'a pas aidé jusqu'à présent (erreurs d'analyse dans la plupart des cas). Question: Est-il possible du tout ce que j'essaye de réaliser ici? Et si oui, quelle est la bonne façon?
Merci d'avance!
Très bien, fonctionne très bien! Je viens de changer mon balisage en utilisant cette solution. Merci beaucoup! – Slauma
Note: Au moins en C#, vous devez utiliser 'et non' pour votre NavigateUrl, il suffit de copier les exemples 1 pour 1 et tout ira bien. – scottheckel