2011-01-05 14 views
0

Hintergrund:ArgumentNullException beim Zugriff auf eine FormView-Instanz

Ich habe eine ASP.NET-Seite, die eine Anzahl von Benutzersteuerelementen enthält. Es gibt 2 Benutzersteuerelemente, die von Interesse sind. Ich muss entweder einen oder keinen von beiden anzeigen, abhängig von dem zuvor ausgewählten Datensatz.

In den Benutzersteuerelementen muss ich Eigenschaften einiger Steuerelemente, die sich in einem FormView befinden, festlegen. Also in meiner Benutzersteuer Code-behind habe ich eine Reihe von Eigenschaften, die in etwa so aussehen:

Private ReadOnly Property phSectionReports() As PlaceHolder 
    Get 
     Return fvConfirmationReport.FindControl("phSectionReports") 
    End Get 
End Property 

Das Problem:

Ich habe Probleme mit dieser Eigenschaft. Manchmal gibt es Nothing/Null zurück und manchmal wirft es eine NullArgumentException mit der Nachricht "Wert kann nicht null sein. Parameter name: container". Die Ausnahme kommt von dem Versuch, auf die Variable fvConfirmationReport zu verweisen. fvConfirmationReport ist die ID meines FormView auf der Seite selbst.

So bin ich wirklich nach Dinge für und wenn irgendwelche Ideen welche Art von Bedingungen (z Stufe in Seite Zyklus usw.) aussehen könnte dazu führen?

Ein Beispiel für einen Stack-Trace ist unten enthalten.
ASP.NET 3.5 SP1, VB.NET

Danke,

Stacktrace:

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) 

Antwort

0

Und die Antwort ist ...

Das Problem von einem GridView kommen würde in meinem FormView. Eines der Elemente, die in der GridView gebunden wurden, war Nothing/Null (eine Änderung in der BLL, doh!) Verursacht die GridView, die sads zu knacken.

Da der Zugriff auf die FormView in meinem Code-Behind das letzte Bit von nicht verwaltetem Code vor der Ausnahme war, war das, wo Visual Studio die Ausnahme angezeigt wurde. Aus diesem Grund hatte ich bei jedem Blick auf die Stack-Trace nicht geklickt, dass es eine GridView war, die Probleme an der Spitze verursacht. Ich hatte FormView in meinem Kopf stecken und das war was ich las.