我最近询问了一个关于如何从内容页面检索母版页中的控件的问题。 许多人建议我使用我的内容页面中的代码:
Label lbl = this.Master.Page.FindControl("uxLabel") as Label;
//Note any server controls defined in the master page could be not be accessible even after a cast is performed, because they could be marked as protected
这种方法当然有效,我也意识到这是一种强类型解决方案,不涉及强制转换Master属性。
在母版页中:
public Label HeaderLabel
{
get { return uxLabel; }
}
在内容页面中使用MasterType:
<%@ MasterType VirtualPath="~/Templates/WebsiteMasterPage.master" %>
现在很容易从内容页面找到控件:
protected void Page_Load(object sender, EventArgs e)
{
this.Master.HeaderLabel.Text = "Any Text here!";
}
我想知道:
感谢您的时间
答案 0 :(得分:2)
我的回答是“为什么不呢?”。
两者对我来说都是很好的方法,但首先需要较少的编码才能开始使用它,因为你不需要初始化任何类字段和设计属性。但必须在运行期间找到控制权。
第二种方法,称之为“类型化方法”,只是转换为特定的母版页类,您可以访问任何特定于类的成员。
“打字方式”的主要问题是什么?您需要对类库(程序集)的引用才能访问此类母版页的成员,这在某些情况下是不可取的。例如,您有一个控件库,并且您希望访问强制母版页的控件,该控件提供了使用某些库控件所需的一些行为。您需要引用Web客户端程序集,但由于您在Web客户端本身引用了控件库,因此无法执行此操作,这是一个循环引用。
工具,方法可用于特定场景。 为什么不?答案可以扩展为为什么不使用“类型化方法”(如果需要)并且您的方案与该概念兼容?。