1

マスターページからcssを継承するコンテンツページのcssを変更しようとしています。以下を試しましたが、何らかの理由で「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生します。

以下は私のcsコードです:

 protected void Page_Load(object sender, EventArgs e)
 {
    HtmlGenericControl mycontrol = (HtmlGenericControl)this.Page.Master.FindControl("ul1").FindControl("li1") as HtmlGenericControl;

      mycontrol.Attributes.Add("class", "newCSS");    
 }

ここでマスターページのコンテンツを見つけます:

    <div id="menu">
        <ul id="ul1" runat="server">
            <li id="li1" runat="server">
                <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl ="home.aspx">Home</asp:HyperLink></li>
            <li id="li2" runat="server">
                <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl ="AboutUs.aspx">About Us</asp:HyperLink></li>
            <li id="li3" runat="server">
                <asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/courses.aspx" >Courses</asp:HyperLink></li>
            <li id="li4" runat="server">
                <asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl="~/News.aspx" >News</asp:HyperLink></li>
            <li id="li5" runat="server">
                <asp:HyperLink ID="HyperLink5" runat="server" NavigateUrl="ContactInfo.aspx" >Contact Us</asp:HyperLink></li>
        </ul>
    </div>

以下のCSS:

 #menu a:hover
{
    background-color: white;
    color: #bee2f1;
}

 .newCSS
{
    background-color: black;
    color: #fff;

}

上記のように、ul、liIdの代わりにハイパーリンクIDとして.FindControlIDを指定しようとしましたが、それも機能しませんでした。

編集:csページで次のことを試しました:

protected void Page_Load(object sender, EventArgs e)
{
        HtmlGenericControl mycontrol = (HtmlGenericControl)Master.FindControl("ul1").FindControl("li1"); 
        mycontrol.Attributes.Add("class", "newCSS");    
}

コンパイラエラーはありませんが、コードは機能しません。

4

1 に答える 1

0

このような状況で使用する再帰関数があります。コンテンツページからマスターページのコンテンツを検索/編集する必要がある場合、それは常に注意が必要です。この関数は私を大いに助けてくれました。Menu2この例では、ボタンのIDを渡すことで呼び出される、マスターページでメニューの戻るボタンを見つけるために使用しています。

*方法

public static Control FindControlRecursive(Control root, string id)
    {
        if (id == string.Empty)
            return null;

        if (root.ID == id)
            return root;

        foreach (Control c in root.Controls)
        {
            Control t = FindControlRecursive(c, id);
            if (t != null)
            {
                return t;
            }
        }
        return null;
    }

*使用法

Menu menu2 = (Menu)FindControlRecursive(Master.Page, "ReturnButton");

この方法を使用して、コンテンツページからマスターページのメニューにアクセスできるようになりました。

これがお役に立てば幸いです。

于 2012-12-28T20:03:47.347 に答える