[英]Why is the content inside the invisible asp:PlaceHolder rendered?
為什么在占位符中呈現內容? 此代碼導致:“對象引用未設置為對象的實例。” 對於MainGuard對象!
一個人應該如何處理這種情況?
<asp:PlaceHolder runat="server" Visible="<%# Model.MainGuard != null %>">
<asp:Image runat="server" ImageUrl="<%# Model.MainGuard.Image.RenderImage() %>" Height="50" />
<%# Model.MainGuard.Name %>
</asp:PlaceHolder>
它沒有被渲染-但是它仍然必須由運行時解析 ,因此您仍然會得到異常。 您唯一的辦法是每次檢查null:
<asp:Image runat="server"
ImageUrl="<%# Model.MainGuard == null ? "" : Model.MainGuard.Image.RenderImage() %>" />
<%# Model.MainGuard == null ? "" : Model.MainGuard.Name %>
您可能考慮使用擴展方法以使用更簡潔的語法:
public static string StringOrEmpty(this MyClass self, Func<MyClass, string> selector)
{
if (self == null) return "";
return selector(self);
}
然后您可以編寫:
<asp:Image runat="server"
ImageUrl="<%# Model.MainGuard.StringOrEmpty(mainGuard => mainGuard.Image.RenderImage()) %>" />
<%# Model.MainGuard.StringOrEmpty(mainGuard => mainGuard.Name) %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.