Asp.net 在占位符内的UserControl中将值设置为TextBox

Asp.net 在占位符内的UserControl中将值设置为TextBox,asp.net,user-controls,placeholder,Asp.net,User Controls,Placeholder,我在用户控件中有一个文本框。我创建了这个用户控件并加载到占位符中 但当我试图给文本框赋值时,我出现了下面的错误: 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

我在用户控件中有一个文本框。我创建了这个用户控件并加载到占位符中

但当我试图给文本框赋值时,我出现了下面的错误:

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表单中,我有控件引用:

<%@ Reference Control="~/Evi/IVT/Sublayouts/IVT_FormClient.ascx"   %>
出现的错误是这行代码:

                ivtFormClient.TxtFirstName = UserClient.FirstName;

不要通过构造函数创建
UserControl
的实例,而是使用
LoadControl
,正如您在
Page\u Load
中所做的那样。但是,只有在(!IsPostBack)的情况下,才能执行此操作。因此,控件在下一次回发时通过构造函数实例化

此外,还必须在每次回发时重新创建动态控件。我建议将UserControl以增量方式添加到页面中。您可以相应地隐藏/显示它。否则,您需要始终创建/添加它,最好在
Page\u Init
中,而不是
Page\u 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);
    }
}
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);
    }
}