2013-09-16 43 views
0

我有一個名爲「is-active」的類,它有一個彩色的箭頭,根據用戶點擊哪個鏈接,從導航欄中伸出到主要內容中。代碼運行一個foreach並從數據庫中提取所有類別。我如何才能讓「is-active」類只顯示當前鏈接?我知道它起作用,因爲我把它放在openList控件中,並且它顯示在所有五個類別中,我只是不知道如何讓它顯示在所選類別上。如何爲C#代碼後面的選定鏈接添加類?

我試圖安裝jQuery來做到這一點,但增加了linkbutton完成所有後面的代碼,所以我不知道如何連接兩個。這是唯一的方式還是有另一種方式?

非常感謝您的幫助!

下面是我的類別和鏈接按鈕的代碼:

protected override void CreateChildControls() 
{ 
    LiteralControl openingDiv = new LiteralControl("<div id='MainPanel'>"); 
    LiteralControl closingDiv = new LiteralControl("</div>"); 

    this.Controls.Add(openingDiv); 

    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
     LiteralControl openList = new LiteralControl("<li class='" + dr["CategoryColor"].ToString() + "'>"); 
     LiteralControl closeList = new LiteralControl("</li>");     

     Label lblNumber = new Label(); 

     LinkButton myLinkButton = new LinkButton(); 

     myLinkButton.Text = "<span class='number'>" + dr["CategoryNumber"] + "</span>"+ dr["CategoryName"].ToString(); 
     myLinkButton.CommandArgument = dr["Category_ID"].ToString(); 
     myLinkButton.Click += myLinkButton_Click; 

     this.Controls.Add(openList); 
     this.Controls.Add(myLinkButton); 
     this.Controls.Add(closeList); 
    } 
    this.Controls.Add(closingDiv); 
} 
void myLinkButton_Click(object sender, EventArgs e) 
{ 
    LinkButton btn = (LinkButton)(sender); 
    Session["CategoryID"] = btn.CommandArgument; 

    Response.Redirect(Request.RawUrl); 
} 
+0

你如何定義「當前鏈接」? – Krishna

+0

如果我不理解你的問題,我很抱歉,但鏈接按鈕是以編程方式生成的。當用戶點擊其中一個導航鏈接按鈕時,它會更新更新面板以反映該選擇的內容。我的問題是,當單擊五個鏈接按鈕中的一個時,應該從鏈接按鈕中伸出一個小箭頭圖像,以便用戶可以看到它是活動鏈接。 – Peter

+0

好的,您可以在更新面板(或)時添加該類,您可以使用[.ajaxComplete()](http://api.jquery.com/ajaxComplete/)來處理該事件 – Krishna

回答

1

棘手,因爲你在其中再現了網頁視圖狀態的按鈕單擊處理程序response.redirecting。 這意味着您的頁面將始終顯示爲新鮮,並且用戶點擊該鏈接的事實已丟失。

你的Response.Redirect之前,你可以放置在一個會話變量的鏈接ID,然後調用它的頁面重新加載時的解決方法。 然後當你在你的循環中,如果會話變量匹配當前按鈕instance.id,你將cssclass設置爲is-active。

記得清除會話變量太多,你設置的CssClass到是主動,以避免在其他頁面混亂之後。

也,你將有你添加按鈕的控件樹後做ID比較,因爲這是系統自動生成的ID爲您服務。如果你願意,我可以給你一個完整的例子。

記住,這是一個解決辦法,並採用不同的方法將是最好的。 通過這我的意思是,如果你要使用ispostback包裝而不是重定向,然後在回發你可以設置ID isactive更容易。

頁面生命週期是如果你想更熟練地圍繞讓你的頭在.NET中一件重要的事,特別是你提到你使用AJAX更新面板。 閱讀:http://msdn.microsoft.com/en-us/library/ms178472(VS.100).aspx這是一個很大的信息,所以稍後將它用於書籤,因爲您將會使用它很多。

+0

鏈接位於主頁上,但是它們會影響'UpdatePanel'控件的內容。這是否會改變您提到的任何內容如果是這樣我可以發佈其他代碼。謝謝。 – Peter

+0

上述內容仍然可以在更新面板中使用,主頁面中的鏈接是。 (因爲你沒有使用正確的ajax部分回傳功能 - 因爲response.redirect())。 如果您使用建議的isPostback包裝,那麼您將調用面板。更新()在你的isPostback包裝,但因爲你只是重定向,不需要做任何事情。 – FlemGrem

+0

你正在做UpdatePanel裏面的'Response.Redirect'?這甚至如何工作? –

相關問題