如何从内容页面访问母版页中的用户控件?

Posted

技术标签:

【中文标题】如何从内容页面访问母版页中的用户控件?【英文标题】:How to access a user control in a masterpage from a content page? 【发布时间】:2010-09-27 19:07:14 【问题描述】:

假设我在母版页中有一个标题用户控件,并且想要根据母版页内加载的内容页面来更改用户控件的属性。我该怎么办?

谢谢!

【问题讨论】:

【参考方案1】:

您可以使用两种方法。第一种是使用Page.Master.FindControl('controlID')。然后您可以将其转换为您的用户控件的类型。第二种方法是将<%@ MasterType VirtualPath=""><%@ MasterType TypeName=""%> 标记添加到您的aspx 页面。在VirtualPath 中添加母版页的虚拟路径,或TypeName 中的类。然后,您可以使用智能感知访问所有内容。

【讨论】:

MasterType 指令应使用 VirtualPath 或 TypeName,但不能同时使用两者。 @Mike 是正确的,我已经编辑了答案以反映他的评论。【参考方案2】:

首先在母版页中找到用户控件,如下所示。然后找到您需要访问其属性的控件。

UserControl uch = Page.Master.FindControl("ucHeader1") as UserControl;
PlaceHolder phproxylist= ucHeader1.FindControl("phProxy") as PlaceHolder;
DropDownList ddlproxylist1 = ucHeader1.FindControl("ddlProxyList") as DropDownList;
phProxylist.Visible = false;

希望这会有所帮助。

【讨论】:

【参考方案3】:

还有另一种方法,即在母版页上创建一个公开用户控件的公共属性。

【讨论】:

【参考方案4】:

使用公共财产是可行的。在内容页面的 FormLoad 方法中,您可以执行以下操作(VB):

Dim myMaster as MyMasterPage = CType(Page.Master, MyMasterPage)
myMaster.MyUserControl.Text = "Hello!"

【讨论】:

使用代码隐藏文件不是最佳实践。这是完全摆脱它们的尝试haacked.com/archive/2008/12/19/… 这不是最佳实践吗?你混淆了 ASP.NET webforms,这个问题是关于 ASP.NET MVC 的。这个答案非常合适。

以上是关于如何从内容页面访问母版页中的用户控件?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 如何从具有嵌套母版页的内容页更改父母版页中的控件

如何从母版页中的控件调用 javascript 函数?

ASP.NET内容页中访问母版页中的对象

关于asp.net中页面事件加载的先后顺序

母版页

如何在母版页中调用jquery ui autocomplete以在内容页面中定义控件