4

Я использую новую функцию маршрутизации в ASP.NET 4 (веб-формы, а не MVC). Теперь у меня есть asp: ListView, привязанный к источнику данных. Одним из свойств является ClientID, который я хочу использовать для ссылки из элементов ListView на другую страницу. В global.asax я определил маршрут:Как создать RouteUrls с параметрами привязки данных декларативно?

System.Web.Routing.RouteTable.Routes.MapPageRoute("ClientRoute", 
    "MyClientPage/{ClientID}", "~/Client.aspx"); 

так, что, например http://server/MyClientPage/2 является действительной URL, если ClientID = 2 существует.

В пунктах ListView У меня есть жерех: гиперссылкой так, что я могу создать ссылку:

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%# "~/MyClientPage/"+Eval("ClientID") %>' > 
    Go to Client details 
</asp:HyperLink> 

Хотя это работает, я бы предпочел использовать RouteName вместо закодированного маршрута, используя выражение RouteUrl. Например, с постоянной ClientID = 2 я мог бы написать:

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl="<%$ RouteUrl:ClientID=2,RouteName=ClientRoute %>" > 
    Go to Client details 
</asp:HyperLink> 

Теперь мне интересно, если я могу совместить синтаксис выражений маршрута и синтаксис Databinding. В принципе, мне нравится заменять константу 2 выше на <%# Eval("ClientID") %>. Но делать это наивно ...

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%$ RouteUrl:ClientID=<%# Eval("ClientID") %>,RouteName=ClientRoute %>' > 
    Go to Client details 
</asp:HyperLink> 

... не работает: <%# Eval("ClientID") %> не оценивается, но рассматривается как строка. Игра с несколькими вариантами кавычек также не помогла до сих пор (ошибки Parser в большинстве случаев).

Вопрос: Возможно ли вообще, чего я пытаюсь достичь здесь? И если да, каков правильный путь?

Спасибо заранее!

ответ

13

Использование System.Web.UI.Control.GetRouteUrl:

VB:

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%# GetRouteUrl("ClientRoute", New With {.ClientID = Eval("ClientID")}) %>' > 
    Go to Client details 
</asp:HyperLink> 

C#:

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%# GetRouteUrl("ClientRoute", new {ClientID = Eval("ClientID")}) %>' > 
    Go to Client details 
</asp:HyperLink> 
+0

Отлично, отлично работает! Я только что изменил разметку, используя это решение. Большое спасибо! – Slauma

+1

Примечание: по крайней мере, на C# вам нужно использовать «а не» для вашего NavigateUrl. Просто скопируйте примеры 1 для 1, и все будет в порядке. – scottheckel

1

Я знаю, что это в основном так же, как решение Саму Lan, но вместо того, чтобы использовать .net управления вы можете использовать регулярные HTML-привязка.

<a href='<%# GetRouteUrl("ClientRoute", new {ClientID = Eval("ClientID")}) %>'> 
    Go to Client details 
</a> 
Смежные вопросы