2009-05-19 14 views
1

マスターページにあるUserControlを使用しています。 UserControlのMasterページコントロールにアクセスする必要があります。私はあなたの提案が必要です。マスターページコントロールへのアクセス

シナリオは、マスタページにラベルがあります。 usercontrolの選択に基づいて、私はmasterpageラベルを変更する必要があります。 UserControlは、コンテンツプレースホルダにないマスタページ自体に存在します。

答えて

1

迅速かつ簡単な方法は、このようなマスターでコントロールでイベントを作成して処理することです:

//Control aspx 
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" 
    Inherits="TestControl" %> 

<div style="width:300px;border:2px groove blue;"> 
    <asp:Button ID="btn1" runat="server" Text="One" onclick="btn_Click" /> 
    <asp:Button ID="btn2" runat="server" Text="Two" onclick="btn_Click" /> 
    <asp:Button ID="btn3" runat="server" Text="Three" onclick="btn_Click" /> 
    <asp:Button ID="btn4" runat="server" Text="Four" onclick="btn_Click" /> 
</div>  

//Control C# 

namespace Controls 
{ 
    public partial class TestControl : System.Web.UI.UserControl 
    { 
     public delegate void UserChoice(TestEventArgs e); 
     public event UserChoice OnUserChoice; 

     protected void btn_Click(object sender, EventArgs e) 
     { 
      if (OnUserChoice != null) 
       OnUserChoice(new TestEventArgs(((Button)sender).Text)); 
     } 
    } 

    public class TestEventArgs : EventArgs 
    { 
     private string _value; 

     public TestEventArgs(string str) 
     { 
      _value = str; 
     } 
     public string Message 
     { 
      get { return _value; } 
     } 
    } 
} 


//MasterPage Code 

protected void Page_Load(object sender, EventArgs e) 
{ 
    test1.OnUserChoice += new 
     Controls.TestControl.UserChoice(test1_OnUserChoice); 
} 

void test1_OnUserChoice(ROMS.Intranet.Controls.TestEventArgs e) 
{ 
    MasterLabel.Text = e.Message; 
} 

MasterLabelは、マスターページにラベルの名前です。

test1はマスターページのコントロールです。

4

あなたのラベルを変更するマスターページにパブリックメソッド(またはパブリックプロパティ)を作成し、ユーザーコントロールに、あなたがそれを呼び出すことができます、Page.masterオブジェクトを介して:

YourMasterPageClass master = Page.master as YourMasterPageClass; 
if(master != null) 
{ 
    master.YourEditMethod("hello"); 
} 
関連する問題