1

我有一个非常小的 ASCX 文件,它打算用作 BlogEngine.NET 主题的一部分,但我遇到了一个我无法弄清楚的错误。这是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 回答