Подтвердить что ты не робот

Как получить родительскую страницу из пользовательского элемента управления на веб-сайте ASP.NET(а не в веб-приложении)

Так же, как задается вопрос.

ИЗМЕНИТЬ 1

Возможно, это возможно, когда запрос обрабатывается для хранения ссылки на родительскую страницу в пользовательском элементе управления?

4b9b3361

Ответ 1

this.Page

или примерно где угодно:

Page page = HttpContext.Current.Handler as Page

Ответ 2

Я не могу придумать какой-либо веской причины для пользовательского элемента управления знать что-либо о странице, на которой он находится, поскольку пользовательский элемент управления должен быть не осведомлен о своем контексте и вести себя предсказуемо, независимо от того, на какой странице он находится.

При этом вы можете использовать this.Page.

Ответ 3

вы можете использовать свойство Parent

если вам нужно это, чтобы найти элемент управления на странице, вы можете использовать

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

Ответ 4

Я всегда использовал this.Page в System.Web.UI.UserControl.

Или вы всегда можете сделать рекурсивный вызов родителя, пока не встретите объект, являющийся страницей.

вид overkill, хотя...

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

    return GetParentPage(this.Parent);
}

Ответ 5

Я нашел способ сделать это, чтобы создать интерфейс, реализовать этот интерфейс, использовать this.Page, чтобы получить страницу из элемента управления, применить его к интерфейсу, а затем вызвать метод.

Ответ 6

Вы должны использовать NamingContainer следующим образом:

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

        }

Ответ 7

Каждый элемент управления имеет родительское свойство, которое можно использовать для доступа к родительскому объекту.

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

EDIT: зависит от того, какое из событий жизненного цикла страницы вы хотите сохранить ссылку и что использовать для хранения этой ссылки. Однако ссылка всегда доступна

Ответ 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
   }
}

Ответ 9

Запись на страницу и мастер-страницу из пользовательского веб-элемента управления. Лично мне нравится, что пользовательские элементы управления свободны, но это можно сделать следующим образом.

Директива, необходимая для 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");
        }
    }