簡體   English   中英

為什么看不見的asp:PlaceHolder內部的內容被渲染?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM