【问题标题】:change text on linkbutton on masterpage?更改母版页上链接按钮上的文本?
【发布时间】:2011-04-27 14:22:59
【问题描述】:

当用户单击内容页面上的按钮并且结果操作满足特定条件时,我希望更改母版页上链接按钮上的文本。 这是可行的吗?我似乎无法通过智能感知访问母版页控件,我认为这是有道理的,但是有没有办法解决它?

再次感谢

【问题讨论】:

    标签: c# asp.net master-pages


    【解决方案1】:

    您必须使用FindControl 方法在母版页中找到控件,例如...

    (ControlType)Master.FindControl("controlID")
    
    
    ((LinkButton)Master.FindControl("LinkButtonID")).Text = "New Text";
    

    【讨论】:

    • 您也可以将 Master 转换为 MasterPage 类名,然后通过它访问控件... ((SiteMaster)Master).linkBut​​ton1.Text = "New Text";
    • 刚试了下,intellisense 中没有控制,到了((SiteMaster)Master)。
    • 在我的评论中,投射 MasterPage 只会打开该 MasterPage 上的公共属性。
    • 同上,((SiteMaster)Master).linkBut​​ton1.Text = "New Text";但在第一个“。”之后我没有列出任何控件
    【解决方案2】:

    在母版页后面的代码中添加一个属性,如下所示:

    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(); 
    } 
    

    【讨论】:

    • 在我的母版页上,我有 '​​ton>'。母版页后面的代码具有属性 'public string LButton { set { lbtn.Text = value; }'。在我的 aspx 页面上,我有一个指向我的母版页的虚拟路径的指令,并且在 Page_Load 中,我有 'Master.LButton = "bar";'。这会将 LinkBut​​ton 的文本更改为“bar”。
    • 这很快就完成了,我想补充一点,我最终不会这样做。我将有一个具有 getter 和 setter 的 LinkBut​​ton 属性,它会很好地工作。我只是匆忙做了。
    • @DarkWinter 没问题。只是在答案中详细阐述了核心以防万一。
    • 当满足特定条件时,您可以改为设置会话变量:'Session.Add("Link Button Text", "foobar");'在 MasterPage 的 Page_Load 中,'if(Session["Link Button Text"] != null) { lButton.Text = Session["Link Button Text"].ToString(); }'
    • @DarkWinter,我看到了你的其他评论。我只是在尝试不同的方式,并决定我最喜欢哪种方式。抱歉拖了这么久。
    【解决方案3】:

    使用 Master 关键字。所以 Master.control 将访问母版页上的一个控件。

    【讨论】:

    • 我认为您的意思是 MasterType 指令? link
    【解决方案4】:

    要提供给定解决方案的另一种替代方案,您还可以考虑为 master 提供一个接口:

    public interface IMaster
    {
       string LinkButtonText { get; set; }
    }
    

    将此接口应用于主控的代码隐藏。然后在页面中做:

    ((IMaster)Page.Master).LinkButtonText = "XYZ";
    

    另外,如果你有一个自定义的基页面类,你可以隐藏 Master 属性并返回这个接口,这样你就可以直接引用它。

    HTH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多