2012-12-21 58 views
1

我有一個非常小的ASCX文件,旨在用作BlogEngine.NET主題的一部分,但是我收到了一個我找不到的錯誤。這裏的FrontPageBox1.ascx文件:Runat服務器變量賦予NULL參考錯誤

<%@ 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. 

的「盒1」變量沒有出現在WebMatrix的」智能感知要麼,但錯誤是編譯後,所以我不認爲這是相關的事。

回答

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>"; 
    } 
} 
+0

Thanks!我今晚晚些時候回家後會試試。 –

+0

是的,伎倆!再次感謝! –