1

BlogEngine.NETテーマの一部として使用することを目的とした非常に小さなASCXファイルがありますが、理解できないエラーが発生します。これがFrontPageBox1.ascxファイルです。

<%@ Control Language="C#" Debug="true" AutoEventWireup="true" CodeFile="FrontPageBox1.ascx.cs" Inherits="FrontPageBox1" %>
<%@ Import Namespace="BlogEngine.Core" %>

<div id="box1" runat="server"></div>

ファイルの背後にあるC#コード(FrontPageBox1.ascx.cs)は次のとおりです。

using System;
using BlogEngine.Core;

public partial class FrontPageBox1 : BlogEngine.Core.Web.Controls.PostViewBase
{
    public FrontPageBox1()
    {
        Guid itemID = new Guid("6b64de49-ecab-4fff-9c9a-242461e473bf");
        BlogEngine.Core.Page thePage = BlogEngine.Core.Page.GetPage(itemID);

        if( thePage != null )
            box1.InnerHtml = thePage.Content;
        else
            box1.InnerHtml = "<h1>Page was NULL</h1>";
    }
}

コードを実行すると、「box1」が参照されている行でエラーが発生します。

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

「box1」変数はWebMatrixのIntellisenseにも表示されませんが、エラーはコンパイル後のものであるため、関連性はないと思います。

4

1 に答える 1

6

ASP.NET Webフォームでは、aspx / ascxファイルで定義されたコントロールは、ページの初期化ステップ中に初期化されるため、OnInitイベント後にのみ使用できます。ロジックをコンストラクターからOnInitイベントハンドラーに移動します

public partial class FrontPageBox1 : BlogEngine.Core.Web.Controls.PostViewBase
{
    protected override void OnInit(EventArgs e)
    {
        Guid itemID = new Guid("6b64de49-ecab-4fff-9c9a-242461e473bf");
        BlogEngine.Core.Page thePage = BlogEngine.Core.Page.GetPage(itemID);

        if( thePage != null )
            box1.InnerHtml = thePage.Content;
        else
            box1.InnerHtml = "<h1>Page was NULL</h1>";
    }
}
于 2012-12-21T00:56:14.583 に答える