从子页面将数据传递到主页面上的用户控件

时间:2012-03-09 20:08:27

标签: asp.net user-controls master-pages

我在母版页上有一个用户控件,我想从子页面传入一个值到该用户控件,我怎么能传递这些值?

此控件位于母版页

<%@ Register TagPrefix="test" TagName="Data" Src="controls/TEST.ascx" %>

此代码变量位于用户控件

public partial class Controls_TEST : System.Web.UI.UserControl
{
    private string _Title;
    public string Title
    {
        get { return _Title; }
        set { _Title = value; }
    }
}

子页面内的代码

public partial class sub_page : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
         Controls_Test m = LoadControl("~/Controls/TEST.ascx");
         m.Title = "TEST";
    }
}

请注意,子页面中的示例代码不起作用,因为它无法在子页面中找到该用户控件。

我已经尝试过Page.Master.FindControl,它也不适用于我。请帮助。

1 个答案:

答案 0 :(得分:4)

使用属性从PageMasterPage进行通信,并使用属性从MasterPageUserControl进行通信。

要获取MasterPage中控件的引用,您应该提供一个返回它的公共属性:

例如(在MasterPage中):

public Controls_Test MyControl
{
     get
     {
         return Controls_TEST1;
     }
}

您可以通过这种方式从您的一个ContentPages中调用此属性(例如,如果您的主人的类型名为“ SiteMaster ”):

protected void Page_Load(object sender, EventArgs e)
{
    ((SiteMaster)Page.Master).MyControl.Title = "TEST";
}

作为经验法则:您对控件的封装越多,您的代码就越健壮,更安全,可维护和可扩展。

因此,最好只提供对Title的访问,而不是整个UserControl。

MasterPage

public String Title
{
     get
     {
         return Controls_TEST1.Title;
     }
    set
    {
        Controls_TEST1.Title = value;
    }
}

ContentPage

((SiteMaster)Page.Master).Title = "TEST";

通过这种方式,您可以更改UserControlMasterPage中的逻辑和控件,而不会在已经直接访问UserControl的网页中出现问题。