ASP.NET小技巧:使用Escape解決資料繫結時 ‘ ” 單引雙引號 所以引發的問題。

來源:互聯網
上載者:User

記得當初寫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(&quot;456a403d-7a8c-45ea-b7f3-e4a61ad9b117&quot;)"></span>

非runat=server

<span onclick='MyMethod("456a403d-7a8c-45ea-b7f3-e4a61ad9b117")'></span>

在runat=sever因為外圍一定是雙引號,可是ASP.NET輸出HTML時把內部的雙引號改成&quot;,這是html表示雙引號編碼,執行javascript會解碼,所以執行javascript不會產生問題。

雖然一堆 \" 看起來也有點灰,不過總比不一致又容易錯好。

 

後話:

這個技巧自己試了很久,前些日子我還用\u0027,\u0022來解決,但發現還是不好用,最近才發現\"最好用。

測試

Server : Win 2003 + .Net Framework 3.5

IE 6-8  : OK

Chrome 5 : OK

Firefox 3.5 : OK

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.