0

ユーザーコントロール内にテキストボックスがあります。このユーザーコントロールを動的に作成し、プレースホルダーにロードしました。

しかし、テキストボックスに値を代入しようとすると、次のエラーが発生しました:

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"   %>

ユーザー コントロールのコード ビハインドは次のとおりです。

    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;
4

1 に答える 1

0

UserControlvia コンストラクターのインスタンスを作成しない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);
    }
}
于 2013-08-28T13:03:23.853 に答える