2013-03-22 4 views
34

У меня есть главная страница, содержащая ярлык для сообщений о статусе. Мне нужно установить текст состояния с разных страниц .aspx. Как это можно сделать на странице содержимого?Как получить доступ к управлению главной страницей страницы контента

public partial class Site : System.Web.UI.MasterPage 
{ 
    public string StatusNachricht 
    { 
     get 
     { 
      return lblStatus.Text; 
     } 
     set 
     { 
      lblStatus.Text = value; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    {    

    } 
} 

Я попытался это, но безуспешно, чтобы сделать его работу:

public partial class DatenAendern : System.Web.UI.Page 
{ 
    var master = Master as Site; 

    protected void Page_Load(object sender, EventArgs e) 
    {    
     if (master != null) 
     { 
      master.setStatusLabel(""); 
     } 
    }   

    protected void grdBenutzer_RowCommand(object sender, GridViewCommandEventArgs e) 
    {   
      try 
      { 
       //some code 

       if (master != null) 
       { 
        master.setStatusLabel("Passwort erfolgreich geändert."); 
       } 
      } 
      catch (Exception ex) 
      { 
       if (master != null) 
       { 
        master.setStatusLabel("Passwort konnte nicht geändert werden!"); 
       }          
      } 
     } 
    }     
} 
+0

так что вы хотите получить доступ к текстовому свойству 'label 'на всех страницах' aspx' ... правильно? –

+0

да, это в основном то, чего я пытаюсь достичь ... – LeonidasFett

+1

@LeonidasFett: Должен ли работать, так какая у вас проблема? Вы использовали отладчик? –

ответ

60

В MasterPage.cs файл добавить property из Label так:

public string ErrorMessage 
{ 
    get 
    { 
     return lblMessage.Text; 
    } 
    set 
    { 
     lblMessage.Text = value; 
    } 
} 

На ваш aspx страницы, чуть ниже Директивы по страницам, добавьте это:

<%@ Page Title="" Language="C#" MasterPageFile="Master Path Name"..... %> 
<%@ MasterType VirtualPath="Master Path Name" %> // Add this 

И в вашем codebehind(aspx.cs), вы можете легко получить доступ к Label Property и установить text, если требуется. Как это:

this.Master.ErrorMessage = "Your Error Message here"; 
+1

спасибо, что работает отлично и очень удобно! – LeonidasFett

+1

измените название этого вопроса на более релевантный. 'как получить доступ к управлению главной страницей страницы контента' –

+1

ok теперь я получаю исключение NullReferenceException для метки в поле свойств ... я загрузил свой новый код выше. я что-то пропустил? – LeonidasFett

3

Вам cannot use var in a field, только на локальных переменных.

Но даже это не будет работать:

Site master = Master as Site; 

Потому что вы не можете использовать this в поле и Master as Site такое же, как this.Master as Site. Так просто инициализировать поле из Page_Init, когда страница полностью инициализирован и вы можете использовать this:

Site master = null; 

protected void Page_Init(object sender, EventArgs e) 
{    
    master = this.Master as Site; 
} 
21

В контентной странице вы можете получить доступ к этикетке и установить текст, например,

Вот lblStatus 'является вашей главной страницы этикетки ID

 
Label lblMasterStatus = (Label)Master.FindControl("lblStatus"); 

lblMasterStatus.Text = "Meaasage from content page"; 
+0

И если у мастера есть хозяин, вы должны «Master.Master». – toddmo

3

У меня есть помощник метод для этого в моем System.Web.UI.Page класс

protected T FindControlFromMaster<T>(string name) where T : Control 
{ 
    MasterPage master = this.Master; 
    while (master != null) 
    { 
     T control = master.FindControl(name) as T; 
     if (control != null) 
      return control; 

     master = master.Master; 
    } 
    return null; 
} 

, то вы можете получить доступ, используя приведенный ниже код.

Label lblStatus = FindControlFromMaster<Label>("lblStatus"); 
if(lblStatus!=null) 
    lblStatus.Text = "something"; 
+0

TAnx alot, dear @surya –

5

Это Работает

Чтобы найти элементы управления главной страницы на детской странице

Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label;      
lbl_UserName.Text = txtUsr.Text; 
1

Это сложнее, если у вас есть вложенное MasterPage. Вам нужно сначала найти элемент управления содержимым, содержащий вложенный MasterPage, а затем найти элемент управления на своем вложенном MasterPage.

Критический разряд: Master.Master.

Смотрите здесь: http://forums.asp.net/t/1059255.aspx?Nested+master+pages+and+Master+FindControl

Пример:

«Найти контроль содержания

Dim карат Как ContentPlaceHolder = Me.Master.Master.FindControl ("cphMain")

'теперь найдите элементы управления внутри этого содержимого

Dim lbtnSave As LinkButton = ct. FindControl ("lbtnSave")

+1

Aha! Вложенная главная страница была моей проблемой, и это сделало трюк! – madannes

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