将值从 aspx 页面传递到其用户控件

Passing value from aspx page to its user control

我正在尝试将值从我的 aspx 页面传递到 ascx(用户控件)。所以,我在用户控件中创建了一个 属性 并在页面的页面加载时初始化它,当我调试它时,我看到 属性 在 aspx 页面的页面加载中分配但在用户控件中它是空的。

页面aspx页面:

        private string _id;
        public string Id
        {
            get { return _id; }
            set { _id = value; }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Id = "ASPX1";
            Pageascx g = new Pageascx();
            g.PageTitle = Id;
        }

Pageascx.ascx 我的用户控件(此用户控件用于我的 Pageaspx.aspx)

          private string _pageTitle;
          public string PageTitle {get; set;}
          protected void Page_Load(object sender, EventArgs e)
          { 
            if (PageTitle == "ASCX1") // **Here, I get PageTitle = null**
          } 

您不应在页面的 Page_Load 方法中将新的用户控件初始化为局部变量。相反,如果您想动态添加它,您应该使用 Page.LoadControl("UserControlName.ascx")。否则,如果它位于页面顶部,您可以直接访问它;如果它位于像 GridViewRow.

这样的子控件中,则可以通过 control.FindControl("UserControlID") 访问它

因此,如果以声明方式添加(在 aspx 代码上),这应该有效:

userControlID.PageTitle = Id;

但请注意,所有变量或控件都在页面生命周期结束时处理。您需要一种 persist them across postbacks 的方法,否则 PageTitle 在下一次回发时为空。您可以使用像 LabelTextBoxHiddenfieldViewState/Session.

这样的控件