2013-04-03 5 views
1

У меня есть страница Default.aspx, и я использую в ней пользовательский контроль. При некоторых условиях в usercontrol.cs мне нужно вызвать функцию, присутствующую на странице Default.aspx.cs (например, на родительской странице пользовательского элемента управления). Пожалуйста, помогите и скажите мне, как это сделать.Вызов функции родительской страницы из пользовательского элемента управления

+0

[Это поможет] (http://stackoverflow.com/questions/623136/calling-a-method-in-parent-page-from-user-control?rq=1) – Damith

ответ

0

Вы должны бросить Page свойство к фактическому типу:

var def = this.Page as _Default; 
if(def != null) 
{ 
    def.FunctionName(); 
} 

метод должен быть публичным:

public partial class _Default : System.Web.UI.Page 
{ 
    public void FunctionName() 
    { 

    } 
} 

Но обратите внимание, что это не лучшей практики, поскольку вы Аппаратно связывая UserControl с Page. Обычно одна цель UserControl - повторное использование. Уже не здесь. Лучший способ общения с UserControl с его страницей - это использование настраиваемого события, которое может обрабатывать страница.

Mastering Page-UserControl Communication - event driven communication

-2

Попробуйте

MyAspxClassName aspxobj= new MyUserControlClassName(); 
    aspxobj.YourMethod(param); 
+1

Вы шутите? Помимо того, что 'UserControl' не является' страницей', использование конструктора для создания страницы (или 'UserControl') не будет работать, если вы хотите получить доступ к элементам управления на этой странице или' UserControl', поскольку этот экземпляр не создается из ASP.NET через жизненный цикл страницы. –

0

Добавить событие пользовательского элемента управления:

public event EventHandler SpecialCondition; 

Raise это событие внутри пользовательского элемента управления при выполнении условия:

private void RaiseSpecialCondition() 
{ 
    if (SpecialCondition != null) // If nobody subscribed to the event, it will be null. 
     SpecialCondition(this, EventArgs.Empty); 
} 

Затем на странице, содержащей пользовательский элемент управления, прослушивайте событие:

public partial class _Default : System.Web.UI.Page 
{ 
    public void Page_OnLoad(object sender, EventArgs e) 
    { 
     this.UserControl1.OnSpecialCondition += HandleSpecialCondition; 
    } 

    public void HandleSpecialCondition(object sender, EventArgs e) 
    { 
     // Your handler here. 
    } 
} 

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

0

parent.aspx.cs

public void DisplayMsg(string message) 
{ 
    if (message == "" || message == null) message = "Default Message"; 
    Response.Write(message); 
} 

для вызова функции родительской страницы из пользовательского элемента управления используйте следующее: UserControl.ascx.cs

this.Page.GetType().InvokeMember("DisplayMsg", System.Reflection.BindingFlags.InvokeMethod, null, this.Page, new object[] { "My Message" }); 

Это прекрасно работает для меня ..

Смежные вопросы

 Смежные вопросы