2013-08-28 49 views
0

我在用戶控件中有一個文本框。我創建dinamically此用戶控件和加載佔位符。將值設置爲位於佔位符內的UserControl中的TextBox

但是,當我嘗試將值分配給該文本框,我提出下一個下面的錯誤:

Object reference not set to an instance of an object 

這是用戶控制:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="IVT_FormClient.ascx.cs" Inherits="Evi.Sc.Web.Evi.IVT.Sublayouts.IVT_FormClient" %> 
<asp:Panel ID="pnlContainer" runat="server">   
    <asp:TextBox ID="txtClientNumber" runat="server"></asp:TextBox> 
</asp:Panel> 

接入改性劑是(在用戶控制):

public string TxtFirstName 
{ 
    get { return txtFirstName.Text; } 
    set { txtFirstName.Text = value; } 
} 

在web形式I具有控制基準:

<%@ Reference Control="~/Evi/IVT/Sublayouts/IVT_FormClient.ascx" %> 

在用戶控件的後面的代碼是:

public partial class frm_VerifyIdentity : System.Web.UI.Page 
    { 
     IVT_FormClient ivtFormClient = new IVT_FormClient(); 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
      IVT_FormClient ivtFormClient = (IVT_FormClient)LoadControl("~/Evi/IVT/Sublayouts/IVT_FormClient.ascx"); 

       Client UserClient = new Client(); 

       UserClient = Load_ClientVerification(Server.HtmlEncode(Request.QueryString["ID"]).Trim()); 

       if (UserClient != null) 
       { 
        ivtFormClient.TxtFirstName = UserClient.FirstName; 
        plhFormClient.Controls.Add(ivtFormClient); 
       } 

      } 
     } 
} 

錯誤發生的是這行代碼:

   ivtFormClient.TxtFirstName = UserClient.FirstName; 

回答

0

請勿通過構造函數創建一個UserControl的實例,但與LoadControl一樣,您已在Page_Load中完成。但是,您只是在做if(!IsPostBack)。因此控制通過構造函數實例化下一個回傳。

另外,您必須在每個回發中重新創建動態控件。我會建議將UserControl延遲添加到頁面。您可以相應地隱藏/顯示它。否則,您需要始終創建/添加它,最好在Page_Init而不是Page_Load

所以這不是最佳做法(只需將其添加到頁面),但根據需要應該工作:

IVT_FormClient ivtFormClient = null; 

protected void Page_Init(object sender, EventArgs e) 
{ 
    ivtFormClient =(IVT_FormClient)LoadControl("~/Evi/IVT/Sublayouts/IVT_FormClient.ascx"); 
    Client UserClient = new Client(); 
    UserClient = Load_ClientVerification(Server.HtmlEncode(Request.QueryString["ID"]).Trim()); 

    if (UserClient != null) 
    { 
     ivtFormClient.TxtFirstName = UserClient.FirstName; 
     plhFormClient.Controls.Add(ivtFormClient); 
    } 
} 
+0

謝謝,這個問題就解決了。 –