ASP.NET小技巧:使用Escape解決資料繫結時 ' " 單引雙引號 所以引發的問題。
Posted on 2010-05-13 16:34 黃偉榮 阅读(2340) 评论(7) 编辑 收藏 举报記得當初寫ASP.NET時為了資料繫結大傷腦筋,如
範例一
<span onclick="<%# Eval("Id","MyMethod('{0}')") %>"></span>
正常
範例二
加上runat=server
<span onclick="<%# Eval("Id","MyMethod('{0}')") %>" runat=”server”></span>
失敗 -剖析器錯誤
範例三
改用 ' 單引號
<span onclick='<%# Eval("Id","MyMethod('{0}')") %>' runat=”server”></span>正常 因為runat=server 輸芔HTML時屬性外圍是用 " 雙引號,就算打單引號也一樣。
範例四
移除runat=server
<span onclick='<%# Eval("Id","MyMethod('{0}')") %>'></span>
失敗 – JavaScript 語法錯誤。
範例五
將MyMethod的單引號改成雙引號
<span onclick='<%# Eval("Id","MyMethod("{0}")") %>'></span>
失敗 -剖析器錯誤
從上面的幾個範例可以發現HtmlControl在是否runat=server,使用單引雙引號有不同的結果,有時因為需要而增加或移除runat=server,我的網頁就掛了,而且一堆單引雙引號常搞的自己灰掉,所以想找出通用做法,可以在二個狀態間共用,後來發現還滿簡單的,使用Escape就可以了。
通用解決方法
<span onclick='<%# Eval("Id","MyMethod(\"{0}\")") %>' runat='server'></span>
<span onclick='<%# Eval("Id","MyMethod(\"{0}\")") %>'></span>
不管是不是runat=server都是 外圍單引號 裡面的雙引號加上斜線如
onclick='<%# Eval("Id","MyMethod(\"{0}\")") %>'
來看輸出成HTML的結果吧
runat=server
<span onclick="MyMethod("456a403d-7a8c-45ea-b7f3-e4a61ad9b117")"></span>
非runat=server
<span onclick='MyMethod("456a403d-7a8c-45ea-b7f3-e4a61ad9b117")'></span>
在runat=sever因為外圍一定是雙引號,可是ASP.NET輸出HTML時把內部的雙引號改成",這是html表示雙引號編碼,執行javascript會解碼,所以執行javascript不會產生問題。
雖然一堆 \" 看起來也有點灰,不過總比不一致又容易錯好。
後話:
這個技巧自己試了很久,前些日子我還用\u0027,\u0022來解決,但發現還是不好用,最近才發現\"最好用。
測試
Server : Win 2003 + .Net Framework 3.5
IE 6-8 : OK
Chrome 5 : OK
Firefox 3.5 : OK
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述