【问题标题】:Get ID of Master Page object in Content Page获取内容页面中母版页对象的 ID
【发布时间】:2012-06-24 03:35:06
【问题描述】:

如果母版页有一个 ID 为 label1 的标签,我如何在内容页中控制该 ID。 id 没有被传递,所以我无法控制它。例如,如果我有一个 ID 为 contentLabel 的控件,我只需键入 contentLabel 即可访问它的代码。(无论我在做什么)

【问题讨论】:

  • @antisanity 我以为这是一个技术术语 - 有趣!我也认为 MasterType 应该自动出现在标记中。我相信他们这样做是因为您可以在代码隐藏中动态设置母版页,因为它们是“松散耦合”的。创建新页面时选择 MasterPage 仅用于设置“默认”MasterPage。所以声明 MasterType 就像是说你承诺不分配动态 MasterPages(作为回报,你会得到强类型智能感知)。

标签: asp.net master-pages webforms content-pages


【解决方案1】:

这里有两个选项:

1:确保您的内容 aspx 指定 MasterType

<%@ MasterType VirtualPath="~/yourMasterPageName.master" %>

这样做可以让您的内容页面了解母版页的预期内容,并为您提供智能感知。因此,现在您可以继续在母版页的代码隐藏中公开标签的 Text 属性。

public string ContentLabelText
{
    get { return contentLabel.Text; }
    set { contentLabel.Text = value; }
}

然后你可以在你的内容页面的代码隐藏页面ala中访问它:

Master.ContentLabelText = "hah!";

或者,2:您可以通过FindControl() 访问标签,如下所示:

var contentLabel = Master.FindControl("contentLabel") as Label;

【讨论】:

  • 有更好的做法还是这是唯一的方法?只是好奇
  • 谢谢,它运行良好。我是 .NET 的新手。编程了一段时间,但从未用于 .NET 或 Web 开发。
  • @auwall12688 以这种方式公开受保护成员的想法对我来说有一种“坏代码味道”。请参阅 Jeff Atwood 对“不雅暴露”的描述:codinghorror.com/blog/2006/05/code-smells.html。如果您需要做的只是更改文本,那么我将仅在文本上使用 getter 和 setter。即公共字符串 ContentText {get{return contentLabel.Text;} set{contentLabel.Text=value;}}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多