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 に答える