4

ASP.NET 4의 새 라우팅 기능 (MVC가 아닌 웹 양식)을 사용하고 있습니다. 이제 asp : ListView 데이터 원본에 바인딩되어 있습니다. 속성 중 하나는 ListView 항목에서 다른 페이지로 연결하는 데 사용하려는 ClientID입니다.databound 매개 변수를 사용하여 RouteUrl을 선언적으로 만드는 방법은 무엇입니까?

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

된 ClientID = 2가 존재하는 경우 그래서 예를 http://server/MyClientPage/2에 대한 유효한 URL은 다음과 같습니다 global.asax에서 나는 경로를 정의했습니다. ListView에 항목에서

가 나는 ASP가 : 하이퍼 링크 나 링크를 만들 수 있도록 :이 나는 RouteUrl 식을 사용하여 하드 코딩 된 경로 대신 RouteName를 사용하는 것을 선호 작동하지만

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

합니다. 일정한 된 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") %> 평가하지만, 문자열로 간주되지 않습니다. 여러 가지 따옴표를 사용하여 놀아 보아도 지금까지는 도움이되지 못했습니다 (대부분의 경우 파서 오류).

질문 : 여기에서 달성하려는 모든 일이 가능합니까? 그리고 그렇다면 정확한 방법은 무엇입니까?

미리 감사드립니다.

답변

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에 'and not "를 사용해야합니다. 예제 1을 1로 복사하면됩니다. – scottheckel

1

나는 그것이 기본적으로 SAMU 란의 솔루션과 동일한 알고 대신 사용하는 그물 당신이 정기적으로 사용할 수있는 제어 HTML 앵커 컨트롤.

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