我在母版页上有一个用户控件,我想从子页面传入一个值到该用户控件,我怎么能传递这些值?
此控件位于母版页
中<%@ 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,它也不适用于我。请帮助。
答案 0 :(得分:4)
使用属性从Page
与MasterPage
进行通信,并使用属性从MasterPage
与UserControl
进行通信。
要获取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";
通过这种方式,您可以更改UserControl
和MasterPage
中的逻辑和控件,而不会在已经直接访问UserControl
的网页中出现问题。