如何从内容页面访问母版页上的.Net元素?
时间:2020-03-05 18:38:41 来源:igfitidea点击:
是否可以从加载到母版的ContentPlaceHolder内的页面访问母版页面上的元素?
我有一个ListView,它在"母版"页面的导航区域中列出了人的名字。在将一个人添加到ListView数据绑定到的表之后,我想更新ListView。在重新加载缓存之前,ListView
当前不会更新其值。我们发现只要重新运行ListView.DataBind()就会更新listview的内容。我们无法在使用母版页的页面上运行ListView.DataBind()
。
下面是我想做的一个示例,但是编译器错误提示
"PeopleListView does not exist in the current context"
GIS.master ListView所在的位置
...<asp:ListView ID="PeopleListView"...
GISInput_People.aspx使用GIS.master作为主页
GISInput_People.aspx.cs
AddNewPerson() { // Add person to table .... // Update Person List PeopleListView.DataBind(); ... }
解决C.Net中此类问题的最佳方法是什么?
解决方案
回答
假设母版页名为MyMaster:
(Master as MyMaster).PeopleListView.DataBind();
编辑:由于默认情况下PeopleListView将被声明为受保护的,因此我们需要将其更改为public,或者创建一个public属性包装器,以便可以从页面访问它。
回答
我相信我们可以使用this.Master.FindControl或者类似的方法来做到这一点,但我们可能不应该要求内容页面对母版页的结构了解太多。
我建议使用另一种方法,例如在内容区域中触发事件,使主机可以侦听并在触发时重新绑定。
回答
假设该控件在母版页上称为" PeopleListView"
ListView peopleListView = (ListView)this.Master.FindControl("PeopleListView"); peopleListView.DataSource = [whatever]; peopleListView.DataBind();
但是@palmsey更正确,特别是如果页面可能有多个母版页的可能性。解耦它们并使用一个事件。
回答
要记住的一个想法是以下ASP.NET指令。
<%@ MasterType attribute="value" [attribute="value"...] %>
MSDN参考
通过创建对母版页的强类型引用,在引用this.Master时将为我们提供帮助。然后,我们无需CAST就可以引用ListView。