1

为什么会渲染占位符内的内容?此代码导致:“对象引用未设置为对象的实例。” 对于 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>
4

1 回答 1

1

它没有被渲染——但它仍然必须由运行时解析,因此你仍然会得到异常。您唯一的办法是每次检查 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) %>
于 2013-07-24T18:07:39.117 回答