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

今天升级一个老程序,其中有段代码感觉很奇怪,虽然是自己写的,但时间长了一时也记不得当时的想法。仔细看了看明白是为了解决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方式是没办法避免这种情况,对于要求快速实现功能的小系统来说,效率才更重要。

发布了750 篇原创文章 · 获赞 38 · 访问量 144万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览