簡體   English   中英

由LoadControl加載的控件上的控件在Page_Load上為null

[英]Controls on Control loaded by LoadControl are null on Page_Load

我有一個由LoadControl加載的用戶控件,並且在上述用戶控件的代碼后面,我嘗試訪問一個為null的控件。

Default.aspx:

protected void Page_Load(object sender, EventArgs e){

    // ...

List<String> usersCustomers = custRepo.GetUserCustomers(currentUser.ID).Select(s => s.custName).ToList();
    FileTrackingControl fileTrackingControl = (FileTrackingControl)LoadControl(typeof(FileTrackingControl), new object[] { usersCustomers, currentUser });
    dashboardWidgetPanel.Controls.Add(fileTrackingControl);

    // ...

}

FileTrackingControl.ascx:

public partial class FileTrackingControl : System.Web.UI.UserControl
{
    List<string> _custNames;
    User _currentUser;

    public FileTrackingControl(List<string> custNames, User currentUser)
    {
        this._custNames = custNames;     
        this._currentUser = currentUser;
    }

    protected void Page_OnInit(object sender, EventArgs e)
    {

        StatToCwData scData = new StatToCwData();

        GridView fileTrackingResultsFC = (GridView)FindControl("fileTrackingResults");

        // CRASH HERE. NPE: fileTrackingResults is NULL
        fileTrackingResults.DataSource = scData.GetControlData(6, _currentUser, _custNames);
        fileTrackingResults.DataBind();
    }
}

基於您確實具有ID為fileTrackingResults的網格視圖(總是值得仔細檢查!),那么我認為您正在嘗試在控件創建之前對其進行訪問(因為我記得MS表示您不應該訪問該控件oninit事件中的樹)。 在您的情況下,可能只是將代碼移到Page_Load事件中,或者創建Page_PreLoad事件並手動映射事件處理程序(如果您需要為其他功能保留Page_Load的情況)。 另外,您可以在用戶控件上創建LoadData類型的方法,然后手動將其觸發(使用接口聲明該方法,以便您可以在其他代碼之間進行滾動)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM