Как создать RouteUrls с параметрами базы данных декларативно? - PullRequest
4 голосов
/ 29 мая 2010

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

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

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

В элементах ListView у меня есть asp: HyperLink, чтобы я мог создать ссылку:

<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>

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

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

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

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

Заранее спасибо!

Ответы [ 2 ]

13 голосов
/ 06 июня 2010

Использование 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>
1 голос
/ 08 августа 2014

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

<a href='<%# GetRouteUrl("ClientRoute", new {ClientID = Eval("ClientID")}) %>'> 
     Go to Client details
</a>
...