1

我有一个使用 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>
4

3 回答 3

5

做到这一点的唯一方法是按照以下方式做一些事情:

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

但请注意FindControl,它不是递归的,因此您需要首先找到包含您要查找的超链接的控件,然后FindControl使用您需要的超链接的 id 在此容器上执行另一个操作。

于 2012-05-25T13:31:43.327 回答
2

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

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

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

假设您的 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";
    }
}

我不确定您的问题中的“链接属性”是什么意思,但如果您指的是超链接,那么您可以这样做:

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";
    }
}
于 2012-05-25T13:33:25.710 回答
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;
    }
}
于 2012-05-25T13:37:31.373 回答