Asp.net 将数据从子页传递到母版页上的用户控件

Asp.net 将数据从子页传递到母版页上的用户控件,asp.net,user-controls,master-pages,Asp.net,User Controls,Master Pages,我在母版页上有一个用户控件,我想将一个值从子页传递到该用户控件,我如何才能传递这些值 此控件位于母版页中 <%@ Register TagPrefix="test" TagName="Data" Src="controls/TEST.ascx" %> 子页面中的代码 public partial class sub_page : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e)

我在母版页上有一个用户控件,我想将一个值从子页传递到该用户控件,我如何才能传递这些值

此控件位于母版页中

<%@ Register TagPrefix="test" TagName="Data" Src="controls/TEST.ascx" %>
子页面中的代码

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,但它对我也不起作用。请提供帮助。

使用属性从
页面
母版页
通信,并使用属性从
母版页
用户控件
通信

要获取母版页中控件的引用,应提供一个返回该控件的公共属性:

例如(在母版页中):

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

作为一条经验法则:封装控件越多,代码就越健壮、故障保护、可维护和可扩展

因此,最好只提供对标题的访问,而不是对整个用户控件的访问

在母版页中:

public String Title
{
     get
     {
         return Controls_TEST1.Title;
     }
    set
    {
        Controls_TEST1.Title = value;
    }
}
((SiteMaster)Page.Master).Title = "TEST";
内容页面中

public String Title
{
     get
     {
         return Controls_TEST1.Title;
     }
    set
    {
        Controls_TEST1.Title = value;
    }
}
((SiteMaster)Page.Master).Title = "TEST";

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

使用属性从
页面
通信到
母版页
,并使用属性通信从
母版页
用户控件

要获取母版页中控件的引用,应提供一个返回该控件的公共属性:

例如(在母版页中):

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

作为一条经验法则:封装控件越多,代码就越健壮、故障保护、可维护和可扩展

因此,最好只提供对标题的访问,而不是对整个用户控件的访问

在母版页中:

public String Title
{
     get
     {
         return Controls_TEST1.Title;
     }
    set
    {
        Controls_TEST1.Title = value;
    }
}
((SiteMaster)Page.Master).Title = "TEST";
内容页面中

public String Title
{
     get
     {
         return Controls_TEST1.Title;
     }
    set
    {
        Controls_TEST1.Title = value;
    }
}
((SiteMaster)Page.Master).Title = "TEST";

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

完美!非常感谢您提到仅公开值而非控件本身,以便母版页实现可以在不破坏子页面的情况下更改。我使用您的方法随机收到此错误,请提供帮助:无法将类型为“ASP.master\u twocolumn\u searchresults\u master”的对象强制转换为类型为“twocolumn\u searchresults”。@Anna:从何处以及何时获得此异常?什么是
twoocolumn\u SearchResults
?@Anna:那么你认为这是微软的Bug?然后只需重新启动IIS(或应用程序池)或编辑web.config即可重新编译所有内容。我看不出这和这个问题有什么关系。您可能想用一个简化的示例问另一个问题。编辑等等,这里已经有一个问题了:另一篇有用的文章。太好了!非常感谢您提到仅公开值而非控件本身,以便母版页实现可以在不破坏子页面的情况下更改。我使用您的方法随机收到此错误,请提供帮助:无法将类型为“ASP.master\u twocolumn\u searchresults\u master”的对象强制转换为类型为“twocolumn\u searchresults”。@Anna:从何处以及何时获得此异常?什么是
twoocolumn\u SearchResults
?@Anna:那么你认为这是微软的Bug?然后只需重新启动IIS(或应用程序池)或编辑web.config即可重新编译所有内容。我看不出这和这个问题有什么关系。您可能想用一个简化的示例问另一个问题。编辑等等,这里已经有一个问题了:另一篇有用的文章。