You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NavigateUrl中使用Eval?含RouteUrl代码示例问询

嘿,我来帮你搞定这两个ASP.NET中关于数据绑定和路由URL的问题!

1. 如何在NavigateUrl中使用Eval表达式?

在ASP.NET Web Forms里,给NavigateUrl绑定动态值最常用的方式就是数据绑定表达式<%# %>,它会在控件执行DataBind()方法时求值。这里有两种常见场景:

直接拼接普通URL

如果只是把字段值拼接到普通URL里,直接用字符串拼接就行,注意引号嵌套(外层用单引号,避免和内层双引号冲突):

<asp:HyperLink runat="server" 
               ID="hlItemLink"
               NavigateUrl='<%# "ProductDetails.aspx?ProductID=" + Eval("ProductID") %>'
               Text='<%# Eval("ProductName") %>'>
</asp:HyperLink>

绑定到路由URL(适配路由系统)

如果项目用了ASP.NET路由,想要生成符合路由规则的URL,就得在数据绑定表达式里调用GetRouteUrl方法——别用<%$ RouteUrl %>表达式构建器,它没办法嵌套Eval。

2. 修正你的RouteUrl+Eval嵌套代码

你原来的写法NavigateUrl="<%$ RouteUrl:RouteName=Kurumsal, ModulBaslik=<%# Eval("ModulResim")%>%>"有个核心问题:<%$ %>表达式构建器和<%# %>数据绑定表达式的执行时机完全不同。

  • <%$ %>在页面解析初始化阶段就会被处理,这时候数据绑定还没开始,Eval("ModulResim")根本不会被求值,会直接被当成字面量处理,导致URL完全错误。
  • <%# %>是在数据绑定阶段(比如GridView.DataBind()执行时)才会计算值。

正确的做法是用<%# %>包裹整个路由URL的生成逻辑,调用GetRouteUrl方法生成符合规则的URL:

<asp:HyperLink runat="server" 
               ID="hlKurumsalLink"
               NavigateUrl='<%# GetRouteUrl("Kurumsal", new { ModulBaslik = Eval("ModulResim") }) %>'
               Text='<%# Eval("ModulBaslik") %>'>
</asp:HyperLink>

额外注意事项

  • 如果Eval("ModulResim")返回的是object类型,建议加上.ToString()确保类型正确,避免潜在的空引用问题:
    NavigateUrl='<%# GetRouteUrl("Kurumsal", new { ModulBaslik = Eval("ModulResim")?.ToString() }) %>'
    
  • 要确保你的路由规则Kurumsal已经在Global.asax或者路由配置类中正确定义,并且包含ModulBaslik这个参数。

内容的提问来源于stack exchange,提问作者Mesut önal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:37:31