【问题标题】:Set value to TextBox in UserControl inside placeholder在占位符内的 UserControl 中将值设置为 TextBox
【发布时间】:2013-08-31 13:39:45
【问题描述】:

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

但是当我尝试为文本框赋值时,我提出了下一个错误:

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

在网络表单中,我有控件参考:

<%@ 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;

【问题讨论】:

    标签: asp.net user-controls placeholder


    【解决方案1】:

    不要通过构造函数创建UserControl 的实例,而是使用LoadControl,就像您在Page_Load 中所做的那样。但是,您只这样做if(!IsPostBack)。因此,控件通过构造函数在下一次回发时实例化。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2019-09-08
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      相关资源
      最近更新 更多