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

ASP.NET中如何通过2个参数实现页面重定向?

解决ASP.NET HyperLink中Eval表达式未解析的问题

你的问题出在没有把整个URL拼接逻辑放在单个数据绑定表达式块中,导致服务器把<%#Eval(...)%>当成普通字符串进行URL编码,而没有执行绑定逻辑。另外你还漏写了第二个参数的键名(应该是Name=),这也会导致接收页面无法正确获取参数。

下面给你几个可行的解决方案:

方案1:在单个Eval块中用String.Format拼接URL

这是最直接的前端绑定方式,把所有参数拼接逻辑放在一个<%# ... %>块里:

<asp:HyperLink runat="server" id="h1" 
    NavigateUrl='<%# String.Format("OrderFromSupplies.aspx?Gender={0}&Name={1}", Eval("Gender"), Eval("Name")) %>'>
    <%# Eval("Name") %>
</asp:HyperLink><br/>

方案2:添加URL编码避免特殊字符问题

如果你的Gender或Name包含空格、中文或其他特殊字符,一定要进行URL编码,否则参数传递会出错。可以用HttpUtility.UrlEncode处理:

<asp:HyperLink runat="server" id="h1" 
    NavigateUrl='<%# String.Format("OrderFromSupplies.aspx?Gender={0}&Name={1}", 
        HttpUtility.UrlEncode(Eval("Gender").ToString()), 
        HttpUtility.UrlEncode(Eval("Name").ToString())) %>'>
    <%# Eval("Name") %>
</asp:HyperLink><br/>

注意:需要确保页面引用了System.Web命名空间,否则HttpUtility会找不到。

方案3:后台代码绑定(适合复杂逻辑)

如果是在GridView/Repeater这类数据控件中,也可以在RowDataBound(GridView)或ItemDataBound(Repeater)事件中手动设置HyperLink的属性:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // 只处理数据行,忽略表头/表尾
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        HyperLink h1 = (HyperLink)e.Row.FindControl("h1");
        string gender = DataBinder.Eval(e.Row.DataItem, "Gender").ToString();
        string name = DataBinder.Eval(e.Row.DataItem, "Name").ToString();
        
        // 同样记得编码
        h1.NavigateUrl = $"OrderFromSupplies.aspx?Gender={HttpUtility.UrlEncode(gender)}&Name={HttpUtility.UrlEncode(name)}";
        h1.Text = name;
    }
}

为什么原来的写法不行?

ASP.NET服务器控件的属性值如果包含多个<%# ... %>块,服务器不会把它们当成独立的绑定表达式执行,而是会把这些代码块当成普通文本进行转义(比如把<转成%3C),最终就出现了你看到的那种包含未解析Eval代码的URL。只有当整个属性值被包裹在一个完整的<%# ... %>绑定块中时,服务器才会执行其中的表达式逻辑。

内容的提问来源于stack exchange,提问作者יובל פרייברג

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:54:38