【发布时间】:2011-04-27 14:22:59
【问题描述】:
当用户单击内容页面上的按钮并且结果操作满足特定条件时,我希望更改母版页上链接按钮上的文本。 这是可行的吗?我似乎无法通过智能感知访问母版页控件,我认为这是有道理的,但是有没有办法解决它?
再次感谢
【问题讨论】:
标签: c# asp.net master-pages
当用户单击内容页面上的按钮并且结果操作满足特定条件时,我希望更改母版页上链接按钮上的文本。 这是可行的吗?我似乎无法通过智能感知访问母版页控件,我认为这是有道理的,但是有没有办法解决它?
再次感谢
【问题讨论】:
标签: c# asp.net master-pages
您必须使用FindControl 方法在母版页中找到控件,例如...
(ControlType)Master.FindControl("controlID")
((LinkButton)Master.FindControl("LinkButtonID")).Text = "New Text";
【讨论】:
在母版页后面的代码中添加一个属性,如下所示:
public LinkButton LButton
{
get { return lButton; }
set { lButton = value; }
}
在 .aspx 页面的顶部,添加此指令以及母版页的虚拟路径:
<%@ MasterType VirtualPath="~/Master.master" %>
重建解决方案并在 .aspx 后面的代码中,您可以这样做:
Master.LButton.Text = "foo bar";
编辑:如果您希望文本在其他页面上持续存在: 当满足某些条件时,您可以改为设置会话变量:
Session.Add("Link Button Text", "foobar");
在 MasterPage 的 Page_Load 中:
if(Session["Link Button Text"] != null)
{
lButton.Text = Session["Link Button Text"].ToString();
}
【讨论】:
使用 Master 关键字。所以 Master.control 将访问母版页上的一个控件。
【讨论】:
要提供给定解决方案的另一种替代方案,您还可以考虑为 master 提供一个接口:
public interface IMaster
{
string LinkButtonText { get; set; }
}
将此接口应用于主控的代码隐藏。然后在页面中做:
((IMaster)Page.Master).LinkButtonText = "XYZ";
另外,如果你有一个自定义的基页面类,你可以隐藏 Master 属性并返回这个接口,这样你就可以直接引用它。
HTH。
【讨论】: