从asp.net文件访问Site.Master对象

时间:2012-05-25 13:25:23

标签: asp.net

我有一个使用Site.Master的asp页面。

我在Site.Master中放了一个链接,master包含了default.aspx。如何在asp文件中访问链接属性?

Site.Master中的

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Register.aspx" 
                    Target="_blank">Register</asp:HyperLink>

3 个答案:

答案 0 :(得分:5)

这样做的唯一方法是做一些事情:

HyperLink link =  this.Master.FindControl("id_of_the_control_you_are_looking_for") as HyperLink;

但是注意FindControl不是递归的,所以你需要首先找到包含你要查找的超链接的控件,然后使用id的id在这个容器上做另一个FindControl。您需要的超链接。

答案 1 :(得分:2)

您需要做的第一件事是将MasterType指令添加到您的内容页面:

<%@ Page Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Namespace.Default" %>
<%@ MasterType VirtualPath="~/Site.Master" %>

现在,您可以在内容页面中的MasterPage中访问每个 public 项目。

假设您的MasterPage在其代码隐藏中具有此功能:

public partial class Site : System.Web.UI.MasterPage
{
    public string Name { get; set; }
}

然后,您可以在内容页面中执行此操作:

public partial class Default
{
    public void Page_Load(object sender, EventArgs e)
    {
        Master.Name = "Bobby";
    }
}

我不确定您在问题中使用“链接属性”是什么意思,但如果您的意思是HyperLink,请按以下步骤操作:

public partial class Site : System.Web.UI.MasterPage
{
    public HyperLink SharedHyperLink { get { return myHyperLink; } }
}

public partial class Default
{
    public void Page_Load(object sender, EventArgs e)
    {
        Master.SharedHyperLink.NavigateUrl = "/Contact.aspx";
    }
}

答案 2 :(得分:1)

假设您在母版页内的某处有一个链接:

<asp:LinkButton ID="mylink" runat="server" Text="OK" CssClass="test" />

然后在子页面的代码后面你可以像这样获取它:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var link = FindControlRecursive(Master, "mylink") as LinkButton;
        if (link != null)
        {
            var css = link.CssClass;
            // TODO: do something with the link
        }
    }

    private static Control FindControlRecursive(Control control, string id)
    {
        if (control.ID == id)
        {
            return control;
        }

        foreach (Control ctrl in control.Controls)
        {
            var foundCtrl = FindControlRecursive(ctrl, id);
            if (foundCtrl != null)
            {
                return foundCtrl;
            }
        }
        return null;
    }
}