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

GridView中HyperLinkField使用DataNavigateUrlFormatString时&符号跳转异常

解决GridView HyperLinkField绑定含&符号字段的跳转问题

嘿,这个问题我太熟悉了!核心原因就是**&符号在URL里是参数分隔符**,直接把带&的字段值拼到跳转链接里,浏览器会把&后面的内容当成新的请求参数,导致你拿到的名称不完整,自然查不到对应的详情。给你几个实用的解决办法:

  • 对参数值进行URL编码
    最直接的方式就是把带特殊字符的名称转换成URL安全的格式,&会被转成%26,这样浏览器就会把它当成普通字符传递。推荐用TemplateField代替HyperLinkField,这样能更灵活地处理编码:

    <asp:TemplateField HeaderText="项目名称">
        <ItemTemplate>
            <asp:HyperLink ID="hlItemName" runat="server"
                           Text='<%# Eval("YourFieldName") %>'
                           NavigateUrl='<%# "~/item.aspx?name=" + HttpUtility.UrlEncode(Eval("YourFieldName").ToString()) %>'>
            </asp:HyperLink>
        </ItemTemplate>
    </asp:TemplateField>
    

    如果你坚持用HyperLinkField,可以在后台的RowDataBound事件里手动编码:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink link = (HyperLink)e.Row.Cells[你的列索引].Controls[0];
            string originalName = DataBinder.Eval(e.Row.DataItem, "YourFieldName").ToString();
            link.NavigateUrl = $"~/item.aspx?name={HttpUtility.UrlEncode(originalName)}";
        }
    }
    
  • 在详情页解码参数
    别忘了在item.aspx页面获取参数时,要把编码后的字符串解码回来,才能拿到原始的带&的名称:

    string itemName = HttpUtility.UrlDecode(Request.QueryString["name"]);
    
  • 更优方案:传递主键ID而非名称
    其实最稳妥的做法是避免传递名称这类可能含特殊字符的字段,改用数据库里的主键ID(比如ItemID)来跳转:

    <asp:HyperLinkField DataTextField="YourFieldName" 
                       DataNavigateUrlFormatString="~/item.aspx?id={0}"
                       DataNavigateUrlFields="ItemID" />
    

    然后在详情页根据ID去数据库查询对应的记录:

    int itemId = int.Parse(Request.QueryString["id"]);
    // 执行数据库查询:SELECT * FROM YourTable WHERE ItemID = @itemId
    

    这种方式不仅解决了特殊字符问题,还更安全(防止用户通过篡改参数遍历数据),也更高效。

内容的提问来源于stack exchange,提问作者Cole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:15:28