使用母版页时访问C#中的内容控件

Gui*_*ais 6 asp.net master-pages findcontrol

今天是个好日子,

我正在ASP.NET中构建一个页面,并在此过程中使用母版页.

我的母版页中有一个内容地点持有人名称"cphBody",其中包含该母版页作为母版页的每个页面的正文.

在ASP.NET网页中,我有一个Content标签(引用"cphBody"),它还包含一些控件(按钮,Infragistics控件等),我想在CodeBehind文件中访问这些控件.但是,我不能直接这样做(this.myControl ...),因为它们嵌套在Content标签中.

我找到了FindControl方法的解决方法.

ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder) Master.FindControl("cphBody");
ControlType myControl = (ControlType) contentPlaceHolder.FindControl("ControlName");
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我怀疑它不是一个非常好的设计.你们知道更优雅的方式吗?

谢谢!

Guillaume Gervais.

CRi*_*ice 7

我试着避免使用FindControl,除非别无选择,并且通常采用更简洁的方式.

如何在子页面顶部包含主页面的路径

<%@ MasterType VirtualPath="~/MasterPages/PublicUI.Master" %>
Run Code Online (Sandbox Code Playgroud)

这将允许您直接从您的母版页代码中调用代码.

然后从你的母版页代码后面你可以让一个属性返回你的控件,或在母版页上制作一个方法获得你的控制等.

public Label SomethingLabel
{
    get { return lblSomething; }
}
//or
public string SomethingText
{
    get { return lblSomething.Text; }
    set { lblSomething.Text = value; }
}
Run Code Online (Sandbox Code Playgroud)

指母版页上的标签

<asp:Label ID="lblSomething" runat="server" />
Run Code Online (Sandbox Code Playgroud)

用法:

Master.SomethingLabel.Text = "some text";
//or
Master.SomethingText = "some text";
Run Code Online (Sandbox Code Playgroud)


Dun*_*can 4

Rick Strahl 这里有一个很好的解释(和示例代码) - http://www.west-wind.com/Weblog/posts/5127.aspx