【问题标题】:Issues with Dynamically Loading a User Control动态加载用户控件的问题
【发布时间】:2014-06-10 12:37:27
【问题描述】:

我在页面上动态加载用户控件,效果很好。但是我面临一个问题:

  • 我在用户控制代码隐藏中有一个类级别变量,并且在用户控制页面加载中分配了相同的值。现在,当我单击包含用户控件的 aspx 页面上的按钮并尝试从中调用用户控件函数时,我看到我在用户控件页面加载中设置的变量的值已被重置。

如果我在设计时有用户控件,则相同的代码可以完美运行。

代码是这样的:

页面:

    MyUserControl cntrl = Page.LoadControl("~/MyUserControl.ascx")
    btn_click(){
    {
      cntrl.TestFunction();
    }

用户控制:

    class MyUserControl: UserControl
    {
       //Variable
       string org="";
       Page_Load()
       {
          org="test";
       }

       TestFunction()
       {
          //The value of org variable is empty here.
          //It should however be "test" which i have set in page_load
       }
   }

【问题讨论】:

    标签: asp.net user-controls


    【解决方案1】:

    “代码是这样的:” - 当提供代码(即使是片段)时,尽量使其符合语言语法 - 在本例中为 C#。

    为了让MyUserControl.Page_Load 触发,您必须将用户控件添加到页面的控件树中:

    MyUserControl cntrl = (MyUserControl)Page.LoadControl("~/MyUserControl.ascx");
    Panel1.Controls.Add(cntrl);
    

    Page_Load 方法必须具有非常具体的签名和范围:

    class MyUserControl: UserControl
    {
      string org="";
    
      protected void Page_Load(object sender, EventArgs e)
      {
        org="test";
      }
    
    }
    

    【讨论】:

    • 谢谢。为我在代码中遵循的快捷方式道歉。是的,我已经将用户控件添加到页面的控件树中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多