访问主页面控制

时间:2009-05-19 05:11:04

标签: master-pages master

我正在使用Master Page中存在的UserControl。我需要访问UserControl中的主页面控件。我需要你的建议。

方案是母版页中存在标签。根据usercontrol中的选择,我需要修改母版页标签。 UserControl存在于Master页面本身而不是内容占位符中。

2 个答案:

答案 0 :(得分:4)

在母版页中创建公共方法(或公共属性)以修改标签,并在UserControl中通过Page.master对象调用它:

YourMasterPageClass master = Page.master as YourMasterPageClass;
if(master != null)
{
    master.YourEditMethod("hello");
}

答案 1 :(得分:1)

快速简便的方法是在控件中创建事件并在master中处理如下:

//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是母版页中的控件。