我在我的公司託管的高流量網站上遇到了NullReferenceException的奇怪問題。例外情況會記錄完整的堆棧軌跡,但我無法複製它。ViewState在Page_Load中爲NULL,但不回發
唯一的例外發生了幾次,每天針對不同的用戶,它是在下面的代碼塊拋出一個NullReferenceException:
protected void Page_Load(object sender, EventArgs e)
{
...
if (!Page.IsPostBack)
{
...
this.ViewState[StaticClass.StaticStringProperty] = StaticClass.StaticIntProperty; // this is the line the exception occurs on
...
}
}
我可以計算是一個NullReferenceException將被拋出的唯一的地方是,如果ViewState
爲NULL,但我從來不知道,也找不到任何理由,爲什麼在Page_Load中這不是回發。
StaticStringProperty
和StaticIntProperty
都是初始化的,靜態屬性爲StaticClass
。
StaticStringProperty
被定義爲:
public const string StaticStringProperty = "IdFromClient";
有誰知道這是怎麼發生,或任何其它原因,一個NullReferenceException將在上述行拋出?
EDIT
按照要求,完整的堆棧 - 用於跟蹤誤差如下。第54行是我上面強調的那一行。
at MyCompany.MyApplication.Appliance.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\shellama\My Documents\MyApplication\Appliance.aspx.cs:line 54
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at MyCompany.MyApplication.PageBase.OnLoad(EventArgs e) in C:\Documents and Settings\shellama\My Documents\MyApplication\App_Code\PageBase.cs:line 58
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
你是什麼意思爲什麼你說這兩個屬性都初始化?它們的值是否在應用程序中的另一個頁面/類中設置?即使你不認爲它是相對的,你仍應該提供有問題的屬性。 – GenericTypeTea 2010-06-04 14:34:27
我編輯了我的問題以提供'StaticStringProperty'聲明 - 這是一個永不改變的硬編碼字符串。 'StaticIntProperty'是一個int,所以永遠不會爲空。 – 2010-06-04 14:39:50
@安迪 - 我明白你的意思了。我和你一樣迷惘! – GenericTypeTea 2010-06-04 14:40:43