GridView超链接字段的URL编码方法

当GridView中包含URL链接列,特别是含有中文字符时,需要进行URL编码。传统的解决办法是在RowDataBound事件中通过代码手动拼接和编码URL。但有更好的解决方案:使用HyperLinkField并转换为TemplateField,在模板中直接编码。尽管这可能导致前后端代码混合,但在追求快速功能实现的WebForm项目中,效率优先。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天升级一个老程序,其中有段代码感觉很奇怪,虽然是自己写的,但时间长了一时也记不得当时的想法。仔细看了看明白是为了解决URL编码问题采取的变通方法,鉴于当时的经验倒也可以理解。

问题简单描述如下:在GridView中绑定一列数据为URL链接,参数中可能会有中文字符需要进行URL编码,直接设置HyperLinkField并不会自动进行编码。

那么应该怎么办呢?

先说下以前的“笨办法”,在RowDataBound方法中,通过代码拼凑URL字串,然后赋值到相应的单元格,URL编码可以代码中实现。

这种方法使用起来没啥问题,只是现在看来不太完美,那么有没有更好的解决方案?

有!请看。

首先我们还是按HyperLinkField配置好需要生成URL的字段,然后选择“将此字段转换为TemplateField,切换到”源“,我们会看到VisualStudio自动生成的模板列,类似下面的代码:

<asp:TemplateField HeaderText="物料清单">
                    <ItemTemplate>
                        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "show.aspx?wlbm=" + Server.UrlEncode(Eval("wlbm").ToString()) + "&wlmc=" + Server.UrlEncode(Eval("wlmc").ToString()) %>' Target="_blank" Text="物料清单"></asp:HyperLink>
                    </ItemTemplate>
                    <HeaderStyle HorizontalAlign="Center" Width="100px" />
                    <ItemStyle HorizontalAlign="Center" Width="100px" />
</asp:TemplateField>
注意<%# %>标识,这实际上是嵌入了一段服务端代码,我们可在这里应用UrlEncode方法进行URL编码,这样就省去了在代码中拼凑URL的过程。

当然,有人会诟病这种将前后端代码混在一起的做法,还不如以前在代码中实现呢。

我觉得WebForm方式是没办法避免这种情况,对于要求快速实现功能的小系统来说,效率才更重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客行天下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值