背景:
我有一个ASP.NET页面,其中包含大量用户控件。有两个用户控件是感兴趣的。我需要显示其中一个或两个都不显示,具体取决于之前选择的记录。
在用户控件中,我需要设置FormView中某些控件的属性。所以在我的用户控件代码隐藏中,我有许多看起来像这样的属性:
Private ReadOnly Property phSectionReports() As PlaceHolder
Get
Return fvConfirmationReport.FindControl("phSectionReports")
End Get
End Property
问题:
我遇到了这个属性的问题。有时它返回Nothing / Null,有时它抛出一个NullArgumentException,消息“Value not not null。参数名称:container”。异常来自于尝试引用fvConfirmationReport变量。 fvConfirmationReport是页面本身的FormView的ID。
所以我真的想要要寻找的东西,如果有任何想法什么样的条件(例如页面循环中的阶段等)可能会导致这种情况? < / p>
下面包含一个示例堆栈跟踪 ASP.NET 3.5 SP1,VB.NET
谢谢,
堆栈跟踪:
at System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName)
at System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding)
at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data)
at System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data)
at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.WebControls.GridView.DataBind()
at System.Web.UI.Control.DataBindChildren()
at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)
...snip...
at System.Web.UI.Control.DataBind()
at System.Web.UI.Control.DataBindChildren()
at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)
at System.Web.UI.WebControls.FormView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding)
at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data)
at System.Web.UI.WebControls.FormView.PerformDataBinding(IEnumerable data)
at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.WebControls.FormView.DataBind()
at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
at System.Web.UI.WebControls.FormView.EnsureDataBound()
at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
at System.Web.UI.Control.FindControl(String id)
at App_UserControls_xxx_ucConfirmationForm.get_phSectionReports() in ucConfirmationForm.ascx.vb:line 343
at App_UserControls_xxx_ucConfirmationForm.Page_Load(Object sender, EventArgs e) in ucConfirmationForm.ascx.vb:line 412
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
...snip...
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
答案 0 :(得分:0)
答案是......
问题来自我GridView
内的FormView
。 GridView
中绑定的项目之一是Nothing / Null (BLL中的更改,哇!)导致GridView
破解sads。
因为在我的代码隐藏中访问FormView
是异常之前的最后一部分非托管代码,所以这是Visual Studio显示异常的地方。因此,每次我查看堆栈跟踪时,我都没有点击它是GridView
导致顶部出现问题。我FormView
陷入了脑海,这就是我在读的东西。