4

我正在使用 ASP.NET 4(Web 表单,而不是 MVC)中的新路由功能。现在我有一个绑定到数据源的 asp:ListView。其中一个属性是ClientID我想用来从 ListView 项目链接到另一个页面的属性。在global.asax我定义了一条路线:

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

例如http://server/MyClientPage/2,如果 ClientID=2 存在,则它是一个有效的 URL。

在 ListView 项目中,我有一个 asp:HyperLink 以便我可以创建链接:

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

虽然这可行,但我更愿意通过使用 RouteUrl 表达式来使用 RouteName 而不是硬编码的路由。例如,使用常量 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") %>不被评估但被视为字符串。到目前为止,使用几种引号也没有帮助(大多数情况下是解析器错误)。

问题:我在这里想要实现的目标有可能吗?如果是,正确的方法是什么?

先感谢您!

4

2 回答 2

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>
于 2010-06-06T13:51:57.663 回答
1

我知道它与 Samu Lan 的解决方案基本相同,但您可以使用常规的 HTML 锚控件,而不是使用 .net 控件。

<a href='<%# GetRouteUrl("ClientRoute", new {ClientID = Eval("ClientID")}) %>'> 
     Go to Client details
</a>
于 2014-08-08T08:09:40.190 回答