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

7
假设我有一个位于主页中的标题用户控件,并且希望根据加载到主页内部的内容页来更改用户控件的属性。我该如何处理?
谢谢!
4个回答

14

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


1
MasterType 指令应该只使用 VirtualPath 或 TypeName,但不能同时使用两者。 - Mike
@Mike 是正确的,我已经编辑了答案以反映他的评论。 - BornToCode

6

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

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;

希望这可以帮到您。

4

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


1

使用公共属性会起作用。在内容页的FormLoad方法中,您可以这样做(VB):

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

使用代码后台文件并不是最佳实践。这里尝试完全摆脱它们 http://haacked.com/archive/2008/12/19/a-little-holiday-love-from-the-asp.net-mvc-team.aspx - Michael Baranov
4
为什么这不是最佳实践?你混淆了这个问题所涉及到的ASP.NET webforms和ASP.NET MVC。这个答案完全适用。 - jwalkerjr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接