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

Как получить доступ к управлению главной страницей страницы контента

У меня есть главная страница, содержащая ярлык для сообщений о статусе. Мне нужно установить текст состояния с разных страниц .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!");
                }                                       
            }
        }
    }                   
}
4b9b3361

Ответ 1

В файле 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";

Ответ 2

На странице "Содержимое" вы можете получить доступ к метке и установить текст, например

Здесь lblStatus - это идентификатор ярлыка вашей главной страницы

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

lblMasterStatus.Text  = "Meaasage from content page";

Ответ 3

Работает

Чтобы найти элементы главной страницы на странице "Ребенок"

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

Ответ 4

Вы не можете использовать var в поле только для локальных переменных.

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

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;
}

Ответ 5

У меня есть вспомогательный метод для этого в моем классе 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";

Ответ 6

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

Критический бит: Мастер.Мастер.

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

Пример:

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

Dim ct As ContentPlaceHolder = Me.Master.Master.FindControl( "cphMain" )

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

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

Ответ 7

If you are trying to access an <a> html element: this is an HTML Anchor... 

My nav bar has items that are not list items (<li>) but rather html anchors (<a>) 

Смотрите ниже: (Это мастер сайта)

  <nav class="mdl-navigation">
                        <a class="mdl-navigation__link" href="" runat="server" id="liHome">Home</a>
                        <a class="mdl-navigation__link" href="" runat="server" id="liDashboard">Dashboard</a>
                    </nav>

Теперь в вашем коде для другой страницы, для моей, это страница входа...

На PageLoad() определите это:

HtmlAnchor lblMasterStatus = (HtmlAnchor)Master.FindControl("liHome");
        lblMasterStatus.Visible =false;

        HtmlAnchor lblMasterStatus1 = (HtmlAnchor)Master.FindControl("liDashboard");
        lblMasterStatus1.Visible = false;

Теперь мы получили доступ к элементам управления мастеров сайта и сделали их невидимыми на странице входа.