C# 页面加载中的ViewState为空,但不是回发
我的公司主持的一个高流量网站出现了一个奇怪的NullReferenceException问题。异常记录为完整的堆栈跟踪,但我无法复制它 对于不同的用户,该异常每天发生几次,它是在下面的代码块中抛出的NullReferenceException:C# 页面加载中的ViewState为空,但不是回发,c#,asp.net,viewstate,nullreferenceexception,C#,Asp.net,Viewstate,Nullreferenceexception,我的公司主持的一个高流量网站出现了一个奇怪的NullReferenceException问题。异常记录为完整的堆栈跟踪,但我无法复制它 对于不同的用户,该异常每天发生几次,它是在下面的代码块中抛出的NullReferenceException: protected void Page_Load(object sender, EventArgs e) { ... if (!Page.IsPostBack) { ... this.ViewSt
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
...
}
}
我唯一能想到的是,如果ViewState
为NULL,就会抛出NullReferenceException,但我从来都不知道这一点,也找不到在非回发的页面加载中会出现这种情况的任何原因
StaticStringProperty
和StaticIntProperty
都是StaticClass
的初始化静态属性
StaticStringProperty
定义为:
public const string StaticStringProperty = "IdFromClient";
有人知道这是怎么发生的吗?或者知道为什么会在上面一行抛出NullReferenceException的任何其他原因吗
编辑
根据请求,错误的完整堆栈跟踪如下所示。第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)
关于它,我唯一能说的是(我最近也遇到过类似的情况)
StaticClass.StaticStringProperty
为NULL。但话说回来,你一定注意到了这一点。我想不出别的什么了。你为什么说这两个属性都是初始化的?它们的值是从应用程序中的另一个页面/类设置的吗?即使您认为它不相关,您仍然应该提供有问题的属性。我编辑了我的问题,以提供StaticStringProperty
的声明-它是一个硬编码的字符串,永远不会更改StaticIntProperty
是一个整数,所以永远不会为空。@Andy-我现在明白你的意思了。我和你一样迷路了!嗨,安迪,很多次我以为我知道在哪一行抛出了一个空指针异常,结果发现我错了。因此,您可能希望发布整个代码块,以查找它可能发生在哪一行。@chiccodoro,谢谢您的建议。我们把PDB留在生产中,它在堆栈跟踪中精确地指向这条线。是的,这是我唯一能想到的,但它是一个硬编码字符串。我编辑了我的问题,以提供StaticStringProperty
的声明StaticIntProperty
是一个int,因此永远不会为null。也许你可以给堆栈跟踪看看。我已经发布了堆栈跟踪。我看不到里面有什么特别有用的东西,但请随便看看。