2013-07-15 50 views
1

我正在動態創建鏈接。該鏈接的NavigateUrl屬性在對方法的調用中設置。但我不想在鏈接被點擊之前調用該方法,因爲有這麼多的鏈接。如何在onClick鏈接上設置鏈接的NavigateUrl?

任何有關如何做到這一點的幫助表示讚賞。謝謝。

public void CreateLink() 
{ 
    LinkButton link = new LinkButton(); 
    link.Click += new EventHandler(link_Click); 
    string key = GetKey(); 
} 

private void link_Click(object sender, EventArgs e) 
{ 
    var url = GetLinkUrl(e.???); 
    Response.Redirect(url);  
} 


public string GetLinkUrl(string key) 
{ 
    //do things to retrieve url 
    return url; 
} 

更新:非常感謝,所有:)我將使用LinkBut​​ton,如上面更新代碼中所示。 但我忘了問:每個鏈接都需要一個關鍵字才能獲得URL。我怎麼能

+1

您可能會發現LinkBut​​ton更適合您的目的。 –

+1

你的代碼如何知道哪個鏈接與哪個鏈接?或者它是全球性的關鍵?我會將關鍵字放在鏈接本身的屬性上,然後在處理程序中讀取該屬性。 – Katstevens

回答

3

一種替代方法是使用ASP按鈕,而不是超鏈接,並在按鈕的點擊處理程序內綁定GetLinkUrl函數。然後運行Response.Redirect('yourURL')執行鏈接。

編輯:阿德里安上面所說的,一個LinkBut​​ton將是兩全其美 - 它是風格像一個超鏈接,但你可以設定一個點擊處理程序,它動態地獲取URL,只有當按鈕實際上是點擊。

+0

感謝信用。 :) –

+0

你能看到我的更新嗎? :) – Yalda

+1

@Yalda,你已經有效地改變了你現在問的問題;現在的答案是沒有意義的,更少的人會看到你的「新」問題。您可能會發現恢復它的更多好處,然後針對您仍然存在問題的部分詢問具體的新問題。 –

4

你在做什麼可能相當複雜;你將需要輸出返回給客戶端的東西指示代碼隱藏方法的調用導航發生之前執行,例如:

HyperLink link = new HyperLink(); 
link.Attributes.Add("onclick", "doClientsideCode();"); 
... 

於是,一些JavaScript:

function doClientsideCode() { 
    // Do a call to a service or similar, to run the method you're wanting to run. 
    // This will then do the navigation you require. 
} 

因此,我的建議實際上是LinkButton;這會火,你可以捕捉服務器端的事件,通過類似於:

public void link_Click(object sender, EventArgs e) { 
    // Run my method 
    // Issue response.redirect to correct URL. 
} 

[編輯 - 在回答編輯的問題,您可以訪問屬性的CommandName和CommandArgument使用一個LinkBut​​ton這要等到做你需要的。但是,我確實認爲那部分現在應該是一個單獨的問題。]