1

ネストされたマスターページからのコントロールを使用しLabelてそのテキストを更新したいネストされたマスターページを使用しています。しかし、アクセスしていません。外側のマスターページを削除すると、正常に機能しています。以下はマークアップとコードです。

アウターマスター

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Roster.Site" %>

ネストされたマスター

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="RoasterMaster.master.cs" Inherits="Roster.RoasterMaster"  MasterPageFile="~/Site.Master" %>
<%@ MasterType VirtualPath ="~/Site.Master" %>

コンテンツページ

<%@ Page Language="C#" AutoEventWireup="true" Inherits="RequestsView" CodeBehind="ViewRequestsByPM.aspx.cs" MasterPageFile ="~/Roaster/RoasterMaster.Master" Title ="Roaster- View Requests by PM" %>
<%@ MasterType VirtualPath ="~/Roaster/RoasterMaster.Master" %>

コンテンツページコード

protected void Page_Load(object sender, EventArgs e)
{


    Label lblTitle = new Label();

    lblTitle =(Label)Master.FindControl("lblTitle");
    lblTitle.Text = "View Roaster Request";
}

実装の何が問題になっていますか。助けてください。ありがとう

4

2 に答える 2

2

以下のコードスニペットをに追加できます

ネストされたマスターページ

public string PageTitle { get; set; } // In page_load
lblTitle.Text = PageTitle;

コンテンツページコード

this.Master.PageTitle = "YOUR TEXT";

これはあなたのために働くでしょう...

于 2012-12-06T11:46:26.660 に答える
1

ラベルが名簿のマスターページにあると仮定すると、マスターページのコードビハインドにテキストを設定するメソッドを追加するだけです。例えば、

RoasterMaster.master.cs

public void SetTitle(string value)
{
   this.lblTitle = value;
}

そしてコンテンツページコードで

Master.SetTitle("View Roaster Request");

ラベルが外部マスターにある場合は、同様に、名簿マスターコードから外部マスターに呼び出しを転送できます。

編集
マスターページのコンテンツは、異なる名前付けコンテナを使用してページコントロール階層内に追加されるため、コードはネストされたマスターケースシナリオでは機能しません。FindControlメソッドは複数のネーミングコンテナにまたがっていません。これはここに当てはまります。ネストしているため、ネーミングコンテナがネストされています。Page.Master外側のネーミングコンテナが表示されますが、ラベルが内側のネーミングコンテナにある可能性があります。方法の1つは、コントロールツリー内で繰り返される独自のfindコントロールの実装を作成することですが、実際には意味がありません。より効率的で、より重要なことに保守性の高い上記のコードを使用したいと思います。

于 2012-12-06T10:51:30.467 に答える