web-dev-qa-db-ja.com

コンテンツページからマスターページコントロールにアクセスする方法

ステータスメッセージのラベルを含むマスターページがあります。さまざまな.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!");
                }                                       
            }
        }
    }                   
}
44
LeonidasFett

MasterPage.csファイルで、property of 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";
73
Praveen Nambiar

[コンテンツ]ページでは、ラベルにアクセスして、次のようなテキストを設定できます。

ここで、「lblStatus」はマスターページのラベルIDです。

 Label lblMasterStatus =(Label)Master.FindControl( "lblStatus"); 
 
 lblMasterStatus.Text = "コンテンツページからの測定"; 
29
DOTNET Team

できます

子ページでマスターページコントロールを見つけるには

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

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";
4
surya

フィールドでvarを使用することはできません 、ローカル変数のみ。

しかし、これでも機能しません:

Site master = Master as Site;

フィールドでthisを使用できず、Master as Sitethis.Master as Siteと同じであるためです。したがって、ページが完全に初期化されたらPage_Initからフィールドを初期化し、thisを使用できます。

Site master = null;

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

ネストされたMasterPageがある場合、これはより複雑です。最初に、ネストされたMasterPageを含むコンテンツコントロールを見つけてから、そこからネストされたMasterPage上のコントロールを見つける必要があります。

重要なビット:Master.Master

こちらをご覧ください: 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 LinkBut​​ton = ct.FindControl( "lbtnSave")

1
Resource

Html要素にアクセスしようとしている場合:これはHTMLアンカーです...

ナビゲーションバーにリストアイテム(<li>)ではなく、HTMLアンカー(<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;

これで、サイトマスターコントロールにアクセスし、ログインページで非表示にしました。

0
James Heffer