天天看點

我的菜單在母版頁,如何更改菜單點選後的效果

網友問:

“ 我的菜單在母版頁中,用li做的,選中的菜單有一個Selected類,設定選中後的背景。

問題出來了,我其他所有頁面都是基于這個母版頁,點選菜單轉到其他頁面,怎麼修改這個被點選的菜單的背景呢?

隻有選中的菜單才有Selected類。

那就是怎麼去除之前選擇的菜單Selected類, 而把被點選的菜單加上Selected類??????????? ”

Insus.NET模拟示範:

我的菜單在母版頁,如何更改菜單點選後的效果

所有參數在子頁面設定與傳給MasterPage。本例子中,在masterpage拉了四個LinkButton. 在每個子頁怎樣去找到Masterpage相對應的LinkButton呢?用Findcontrol(),用foreach去循環所有LinkButton?

Insus.NET慣用的方法,就是寫了一個接口Interface。因為所有子網頁,隻管設定參數與指定目标。而怎樣找到目錄,不是子網頁的事情。

我的菜單在母版頁,如何更改菜單點選後的效果
我的菜單在母版頁,如何更改菜單點選後的效果

View Code

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

/// <summary>

/// Summary description for ISetValue

/// </summary>

namespace Insus.NET

{

    public interface ISetValue

    {

        void SetValue(string colorName,string pageName);

    }

}

MasterPage實作這個接口中:

我的菜單在母版頁,如何更改菜單點選後的效果
我的菜單在母版頁,如何更改菜單點選後的效果

using System.Web.UI;

using System.Web.UI.WebControls;

using Insus.NET;

public partial class MySite : System.Web.UI.MasterPage,ISetValue 

    protected void Page_Load(object sender, EventArgs e)

    public void SetValue(string colorName, string pageName)

        foreach (Control ctl in menu.Controls)

        {

            if (ctl is LinkButton)

            { 

                LinkButton lb = (LinkButton)ctl;

                if (lb.PostBackUrl.EndsWith (pageName))

                    lb.BackColor= System.Drawing.Color.FromName(colorName);

            }

        }

Masterpage.aspx:

我的菜單在母版頁,如何更改菜單點選後的效果
我的菜單在母版頁,如何更改菜單點選後的效果

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MySite.master.cs" Inherits="MySite" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <fieldset>

            <legend>Masterpage</legend>

            <div id="menu" runat="server">

                <asp:LinkButton ID="LinkButton1" runat="server" BorderWidth="1" Text="PageA" PostBackUrl="~/Page1.aspx"></asp:LinkButton> 

                <asp:LinkButton ID="LinkButton2" runat="server" BorderWidth="1" Text="PageB" PostBackUrl="~/Page2.aspx"></asp:LinkButton> 

                <asp:LinkButton ID="LinkButton3" runat="server" BorderWidth="1" Text="PageC" PostBackUrl="~/Page3.aspx"></asp:LinkButton> 

                <asp:LinkButton ID="LinkButton4" runat="server" BorderWidth="1" Text="PageD" PostBackUrl="~/Page4.aspx"></asp:LinkButton> 

            </div>

        </fieldset>

            <legend>Content</legend>

            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

            </asp:ContentPlaceHolder>

    </div>

    </form>

</body>

</html>

所有子頁面的cs代碼:

我的菜單在母版頁,如何更改菜單點選後的效果
我的菜單在母版頁,如何更改菜單點選後的效果

public partial class Page1 : System.Web.UI.Page

        if (!IsPostBack)

            Data_Binding();

    void Data_Binding()

        string path = Request.RawUrl;

        string pageName = path.Substring(path.LastIndexOf('/'));

        ((ISetValue)this.Master).SetValue("#ff0000", pageName);  //注意啦,每個子頁面參數在這裡設定!!!

繼續閱讀