我在執行一個aspx文件中的一些內聯代碼:的NullReferenceException直列中代碼asp.net處理
<dd><%= encode(Listing.Address.Line1) %> </dd>
問題是,在某些情況下上市對象將是無效,並且因此這樣的性質的引用因爲地址會拋出異常。我如何處理這個異常?我基本上想忽略它:抓住它,然後繼續定期執行/渲染頁面。
我在執行一個aspx文件中的一些內聯代碼:的NullReferenceException直列中代碼asp.net處理
<dd><%= encode(Listing.Address.Line1) %> </dd>
問題是,在某些情況下上市對象將是無效,並且因此這樣的性質的引用因爲地址會拋出異常。我如何處理這個異常?我基本上想忽略它:抓住它,然後繼續定期執行/渲染頁面。
做一個空檢查。測試您期望可能發生的異常情況而不是處理異常的情況幾乎總是會更好。運行時必須做更多的工作來拋出和處理異常,而不是僅僅爲了測試它而進行相應的處理。
<%= encode(Listing != null && Listing.Address != null ? Listing.Address.Line1 : string.Empty) %>
而且一定要檢查地址以防萬一。短路是你的朋友,訂單事宜在& & ing。
沒有看到更廣泛的圖片,我會建議你的viewmodel,如果你有一個,有一個方法,自動爲你做。如果你在任何地方都有它,那麼這種東西在視圖中會變得很難看。
使用此
<%= if(Listing.Address.Line1 != null)
{
encode(Listing.Address.Line1)
}
%>
如他所述,如果列表爲空,則會拋出完全相同的異常。在執行此操作之前,您沒有測試列表的存在。 – 2011-02-16 03:37:25
假設問題是相當簡單的,其中Listing
不爲空,因此,所有的IT底層屬性不爲空或者你可以輸入這樣的事情:
<%=編碼((清單??(新上市(AddressObj)))。Address.Line1)%>
你可以在這裏有一個構造函數,使得Address.Line1
總會有值寫Listing
類。
現在,如果您的問題相當複雜,您所在的位置Listing
對象可能有一個有效的實例,但其底層屬性可能不是:最好的方法是將編碼方法包裝到另一個方法或屬性中,該方法或屬性將返回預期結果,並在標記中調用它。
public string EncodedAddress
{
get
{
if (Listing == null)
return string.Empty;
if (Listing.Address == null)
return string.Empty;
return encode(Listing.Address.Line1);
}
}
在標記你做這樣的事情:
<%= EncodedAddress %>
哎呀,沒看到你和發佈幾乎同樣的事情。 +1。 – 2011-02-16 05:18:34