2013-04-22 35 views
1

嗨,我已經創建了由<UL>和服務器控制其<LI>
我只是想重用我的菜單中的所有六頁以下
是控制代碼 ASP代碼
改變類從服務器端裏的

<%@ Control Language="C#" ClassName="Menu" %> 
    <ul id="ulSideBar" class="nav nav-list" runat="server"> 
       <li accesskey="1" id="liDefault" runat="server" **class="active"**> 
        <asp:LinkButton runat="server" ID="lnkDefault" OnClick="lnkDefault_Click">Introduction</asp:LinkButton></li> 
       <li accesskey="2" id="liSquad" runat="server"> 
        <asp:LinkButton runat="server" ID="lnkSquad" OnClick="lnkSquad_Click">Squad</asp:LinkButton> 
       </li> 
       <li accesskey="3" id="liGallery" runat="server"> 
        <asp:LinkButton runat="server" ID="lnkGallery" OnClick="lnkGallery_Click">Gallery</asp:LinkButton> 
       </li> 
       <li accesskey="4" id="liMatches" runat="server"> 
        <asp:LinkButton runat="server" ID="lnkMatches" OnClick="lnkMatches_Click">Matches</asp:LinkButton> 
       </li> 
       <li accesskey="5" id="liActivities" runat="server"> 
        <asp:LinkButton runat="server" ID="lnkActivities" OnClick="lnkActivities_Click">Activities</asp:LinkButton> 
       </li> 
       <li accesskey="6" id="liNewsFeed" runat="server"> 
        <asp:LinkButton runat="server" ID="lnkNewsFeed" OnClick="lnkNewsFeed_Click">News Feed</asp:LinkButton> 
       </li> 
      </ul> 

林在我的六頁使用此控件現在,我的問題是如何改變類=有效爲準<li>我點擊,只能通過服務器端

我已經試過這個代碼在控件的代碼隱藏,但它不工作

protected void lnkDefault_Click(object sender, EventArgs e) 
    { 
     liDefault.Attributes.Add("class", "active"); 
     liSquad.Attributes.Remove("class"); 
     liGallery.Attributes.Remove("class"); 
     liMatches.Attributes.Remove("class"); 
     liActivities.Attributes.Remove("class"); 
     liNewsFeed.Attributes.Remove("class"); 
     Response.Redirect("Default.aspx"); 
    } 
    protected void lnkSquad_Click(object sender, EventArgs e) 
    { 
     liDefault.Attributes.Remove("class"); 
     liSquad.Attributes.Add("class", "active"); 
     liGallery.Attributes.Remove("class"); 
     liMatches.Attributes.Remove("class"); 
     liActivities.Attributes.Remove("class"); 
     liNewsFeed.Attributes.Remove("class"); 
     Response.Redirect("Squad.aspx"); 
    } 
    protected void lnkGallery_Click(object sender, EventArgs e) 
    { 
     liSquad.Attributes.Remove("class"); 
     liDefault.Attributes.Remove("class"); 
     liGallery.Attributes.Add("class", "active"); 
     liMatches.Attributes.Remove("class"); 
     liActivities.Attributes.Remove("class"); 
     liNewsFeed.Attributes.Remove("class"); 
     Response.Redirect("Gallery.aspx"); 
    } 
    protected void lnkMatches_Click(object sender, EventArgs e) 
    { 
     liDefault.Attributes.Remove("class"); 
     liSquad.Attributes.Remove("class"); 
     liGallery.Attributes.Remove("class"); 
     liMatches.Attributes.Add("class", "active"); 
     liActivities.Attributes.Remove("class"); 
     liNewsFeed.Attributes.Remove("class"); 
     Response.Redirect("Matches.aspx"); 
    } 
    protected void lnkActivities_Click(object sender, EventArgs e) 
    { 
     liDefault.Attributes.Remove("class"); 
     liSquad.Attributes.Remove("class"); 
     liGallery.Attributes.Remove("class"); 
     liMatches.Attributes.Remove("class"); 
     liActivities.Attributes.Add("class", "active"); 
     liNewsFeed.Attributes.Remove("class"); 
     Response.Redirect("Activities.aspx"); 
    } 
    protected void lnkNewsFeed_Click(object sender, EventArgs e) 
    { 
     liDefault.Attributes.Remove("class"); 
     liSquad.Attributes.Add("class", "active"); 
     liGallery.Attributes.Remove("class"); 
     liMatches.Attributes.Remove("class"); 
     liActivities.Attributes.Remove("class"); 
     liNewsFeed.Attributes.Add("class", "active"); 
     Response.Redirect("NewsFeed.aspx"); 
    } 

回答

3

這解決了我的問題。我的問題是我使用的自定義控件有<ul><li>,但控件使用的頁面存在問題,即當用戶單擊li時,它應該將其類改爲活動(class ='active'),但由於回發它不是改變
可能是別人有這個問題可以使用我的解決方案。我在我的自定義控制代碼隱藏

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      // switch (Parent.TemplateControl.AppRelativeVirtualPath.Replace("~/Teams/", "")) 
      switch (System.IO.Path.GetFileName(Page.Request.Path)) 
      { 
       case "Default.aspx": 
        liDefault.Attributes.Add("class", "active"); 
        liSquad.Attributes.Remove("class"); 
        liGallery.Attributes.Remove("class"); 
        liMatches.Attributes.Remove("class"); 
        liActivities.Attributes.Remove("class"); 
        liNewsFeed.Attributes.Remove("class"); 
        break; 
       case "Squad.aspx": 
        liDefault.Attributes.Remove("class"); 
        liSquad.Attributes.Add("class", "active"); 
        liGallery.Attributes.Remove("class"); 
        liMatches.Attributes.Remove("class"); 
        liActivities.Attributes.Remove("class"); 
        liNewsFeed.Attributes.Remove("class"); 
        break; 
       case "Gallery.aspx": 
        liSquad.Attributes.Remove("class"); 
        liDefault.Attributes.Remove("class"); 
        liGallery.Attributes.Add("class", "active"); 
        liMatches.Attributes.Remove("class"); 
        liActivities.Attributes.Remove("class"); 
        liNewsFeed.Attributes.Remove("class"); 
        break; 
       case "Matches.aspx": 
        liDefault.Attributes.Remove("class"); 
        liSquad.Attributes.Remove("class"); 
        liGallery.Attributes.Remove("class"); 
        liMatches.Attributes.Add("class", "active"); 
        liActivities.Attributes.Remove("class"); 
        liNewsFeed.Attributes.Remove("class"); 
        break; 
       case "Activities.aspx": 
        liDefault.Attributes.Remove("class"); 
        liSquad.Attributes.Remove("class"); 
        liGallery.Attributes.Remove("class"); 
        liMatches.Attributes.Remove("class"); 
        liActivities.Attributes.Add("class", "active"); 
        liNewsFeed.Attributes.Remove("class"); 
        break; 
       case "NewsFeed.aspx": 
        liDefault.Attributes.Remove("class"); 
        liSquad.Attributes.Remove("class"); 
        liGallery.Attributes.Remove("class"); 
        liMatches.Attributes.Remove("class"); 
        liActivities.Attributes.Remove("class"); 
        liNewsFeed.Attributes.Add("class", "active"); 
        break; 
      } 
     } 
    } 
1

你可能會改變類屬性,但然後立即重定向到另一個,所以你頁面從來沒有看到它。當頁面重新加載時,更改將丟失。

您可能需要將活動頁面存儲在會話變量中,然後在控件加載時設置活動類。

[編輯] 如果你想控制,以反映它是什麼頁面上,也許你可以使用頁面的標題(或其他頁面的一個屬性):

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Parent.Page.Title == "My Title") 
    { 
    } 
+0

你的答案是可以接受的,但我不能使用會話任何其它選項 – skhurams 2013-04-22 13:59:27

+0

@skhurams謝謝,我給我的回答添加了一條建議。 – 2013-04-22 16:20:49

+0

感謝你,我發現了一個更好的解決方案System.IO.Path.GetFileName(Page.Request.Path)這解決了我的問題 – skhurams 2013-04-23 12:12:21

0

使用此功能,或者你可以做任何一種方式查詢在瀏覽器的網址,讓selectoion在你的菜單

string page = Path.GetFileNameWithoutExtension(Request.AppRelativeCurrentExecutionFilePath); 
string pageDirectory = Path.GetDirectoryName(Request.AppRelativeCurrentExecutionFilePath); 

string category = Request.QueryString.Count>0 ? Request.QueryString[0] : string.Empty; 

switch (category) 
{ 
    case "home": 
     lnk_Home.CssClass = "selected"; 
     break; 
}