以 Convert.ToString(Eval("ID")) 取代 Eval("ID").ToString()

在 ASP.NET 頁面套版時,我常看到有工程師是這樣套版的:

<a href="<%# Server.UrlPathEncode(Eval("Attachment").ToString()) %>">XXXX</a>

看出問題了嗎?

是的,當 Attachment 這個欄位的內容是 null 的時候,這裡就會發生例外狀況(Exception),所以這樣的寫法一旦養成習慣,那就等著常常被電啦!

我認為比較好的方式應該是改用以下的寫法:

<a href="<%# Server.UrlPathEncode(Convert.ToString(Eval("Attachment"))) %>">XXXX</a>

其實只是換個角度來想而已!原本是把 Eval("Attachment") 當成「主角」來看待,讓這位物件的主角呼叫 ToString() 回應字串;現在改變成「配角」,將 Eval("Attachment") 變成參數傳入 Convert 類別提供的 ToString() 方法,如果傳入的 Eval("Attachment") 是 null 的話,Convert.ToString(Eval("Attachment")) 傳回的值就是 String.Empty (也就是空字串啦),這樣一來就不會發生 Exception 了。

這是一個很小很小的技巧,但是請銘記在心。

2008-06-20 補充:

  • 我最近發現原來使用 Eval("ID", "") 也可以轉成字串喔,簡短多了,供大家參考!
  

此文章由 will 發表於 2008/6/6 下午 10:04:09

永久連結 | 評論 (3) | 此文章的RSSRSS comment feed |

分類: .Net | ASP.NET | C#

標籤:

收藏:

相關文章

評論

六月 7. 2008 12:11

晴樹

我其實寫法跟『有的工程師』一樣
不過從沒發生過問題

因為資料庫中的null,我是在select時,就用了 isnull(欄位)方式處理
我想跟您的方法一樣,也是處理null值的方法之一

晴樹 us

六月 7. 2008 12:35

will

晴樹,

像您這樣優秀的工程師,在開發的時候能夠注意到使用 isnull(欄位) 方式處理 Null 問題是很棒的,只是「有的工程師」都會「懶得」處理這一段,或「忽略」了這些 Null 欄位的處理而導致例外狀況,所以才要大家改用 Convert.ToString() 方法,以免「哪天」真的疏忽了而出現錯誤畫面。

另外,當表格欄位多的時候,處理 Null 是真的蠻繁瑣的,而且通常專案需求也經常在改變,程式改來改去的就很有可能有幾支程式沒處理到 Null 的情況,所以才會有此建議。

will tw

八月 7. 2008 02:45

cloduio

小弟有一個想法
提出來請保哥與晴樹兄看有沒有錯誤:)
關於晴樹兄提到的
在select的時候就用isnull的話
如果資料有50萬筆呢?
那不就要跑50萬次isnull
當然晴樹兄應該會避開這種狀況
但是怕如果這樣再資料量大時真的會嚴重影響效能
而有人就照本全收
沒有考慮其他狀況..
所以在選擇寫法時是不是還要在多考慮一下目前這一次的查詢我們打算撈出多少資料呢:)

cloduio tw

新增評論


(將顯示您的Gravatar圖示)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



線上預覽

八月 29. 2008 08:45