我正在使用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:超链接,以便我可以创建链接:

<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") %> 未评估,而是被视为字符串。到目前为止,玩几种引号的口味也没有帮助(在大多数情况下是解析器错误)。

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

先感谢您!

有帮助吗?

解决方案

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

其他提示

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

<a href='<%# GetRouteUrl("ClientRoute", new {ClientID = Eval("ClientID")}) %>'> 
     Go to Client details
</a>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top