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 に答える