为什么占位符内的内容会被渲染? 此代码导致:“对象引用未设置为对象的实例。” 对于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>
答案 0 :(得分:1)
它没有渲染 - 但它仍然必须由运行时解析,因此你仍然得到异常。您唯一的办法是每次检查是否为空:
<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) %>