我怎样才能从用户控制父页面在ASP.NET网站(不是Web应用程序)(How can I get t

2019-07-29 02:38发布

正如题目要求。

编辑1

也许这是可能的某个时候,同时请求正在处理存储在用户控制父页面的引用?

Answer 1:

this.Page

或从任何地方:

Page page = HttpContext.Current.Handler as Page


Answer 2:

我想不出任何比较好的理由用户控件知道它是作为用户控制应该是无知的上下文和行为的页面的任何可预见的,无论是在哪一页。

话虽这么说,你可以使用this.Page



Answer 3:

您可以使用Parent属性

如果你需要这找到网页上的控制,那么你可以使用

Label lbl_Test = (Label)Parent.FindControl("lbl_Test");


Answer 4:

我总是用this.Page在System.Web.UI.UserControl。

或者,你可以随时做家长递归调用直到你遇到一个对象,它是一个页面。

一种矫枉过正的,但...

protected Page GetParentPage( Control control )
{
    if (this.Parent is Page)
        return (Page)this.Parent;

    return GetParentPage(this.Parent);
}


Answer 5:

我发现这样做的方法是创建一个接口,实现该接口,使用this.Page从控制得到的页面,将其转换为界面,然后调用方法。



Answer 6:

您必须使用NamingContainer这样的:

       try
        {
            if (!string.IsNullOrWhiteSpace(TargetCtrlID))
            {
                var ctrl = NamingContainer.FindControl(TargetCtrlID);
                if(ctrl != null)
                    Console.Write("'" + ctrl.ClientID + "'");
            }
        }
        catch
        {

        }


Answer 7:

每个控制器有你可以用它来访问父parent属性。

protected void Page_Load(object sender, EventArgs e)
{
  Response.Write(this.Parent.ID);
}

编辑:取决于所要存储的参考和使用什么来存储参考页面生命周期事件之一。 然而,参考始终可用



Answer 8:

创建在用户控件的委托,然后分配给它从父页面的方法。

class MyUserControl : UserControl
{
   delegate object MyDelegate(object arg1, object arg2, object argN);
   public MyDelegate MyPageMethod;

   public void InvokeDelegate(object arg1, object arg2, object argN)
   {
     if(MyDelegate != null)
        MyDelegate(arg1, arg2, argN); //Or you can leave it without the check 
                                      //so it can throw an exception at you.
   }
}

class MyPageUsingControl : Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
     if(!Page.IsPostBack)
        MyUserContorlInstance.MyPageMethod = PageMethod;
   }

   public object PageMethod(object arg1, object arg2, object argN)
   {
     //The actions I want
   }
}


Answer 9:

从Web用户控件写入页和母版页:我个人喜欢的用户控件是松散的,但它可以这样做。

母版页:

public partial class Second : System.Web.UI.MasterPage
    {
        public void SecondMasterString(string text)
        {
            MasterOut.Text += text;
        }
    }

指令需要在WebForm1的:那么页面可以写信给母版页

<%@  MasterType VirtualPath="~/DemoFolder/MasterPages/Second.master" %>

方法写入页和母版页:

public partial class WebForm1 : System.Web.UI.Page
    {
    public void SetPageOutput(string text)
        {
            // writes to page
            this.PageOut.Text = text;
        }

        public void SetMaster(string text)
        {
            // writes to Master Page
            this.Master.SecondMasterString(text);
        }
}

用户控制写入到页面和母版页:

public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            LegoLand.DemoFolder.MasterPages.WebForm1 page = (WebForm1)this.Parent.Page;
            page.SetMaster("** From the control to the master");
            page.SetPageOutput("From the control to the page");
        }
    }


文章来源: How can I get the parent page from a User Control in an ASP.NET Website (not Web Application)