2013-09-24 36 views
0

我已經將鏈接動態添加到一個asp頁面。點擊後,我打電話給一個功能。我想找出調用該函數的鏈接的ID。我已經添加google.com和yahoo.com來解釋我的需求。我想要這個函數在原來的場景中從db中獲取數據。查找鏈接的ID

<a href="#" onServerClick="abc_Click" id="4"/>click</a> 
<a href="#" onServerClick="abc_Click" id="5"/>click here</a> 

C#代碼:

protected void abc_Click() 
{ 
    if(id is 4) // don't know how to know the id of the link that calls the function. 
     Response.Redirect("http://www.google.com"); 
    else 
     Response.Redirect("http://www.yahoo.com"); 
} 

我稱爲Call a C# function in ASP.NET when clicking on a HTML link

現在我有兩個問題。

  1. 當鏈接被點擊時,函數沒有被調用。
  2. 我不知道如何找到調用函數的鏈接的id。
+1

你必須添加'RUNAT = 「服務器」'。 –

+2

或使用「LinkBut​​ton」。 –

+0

對不起,我沒有提到。我添加runat =「服務器」,它仍然無法正常工作。 – Srinivas

回答

1

您錯過了runat-server屬性。如果你包含這個,你需要鏈接表單。但是你不能將鏈接的ID傳遞給服務器(除非你先用JS修改一個隱藏的字段,然後發佈隱藏的字段)。但是,對於一個相當簡單的問題,這是一個非常複雜的解決方案

最簡單的方法是添加一個查詢字符串,然後在Page_Load中執行數據庫調用。

例子:

<a href="/mypage.aspx?id=4" />click</a> 
<a href="/mypage.aspx?id=5" />click here</a> 

然後在後臺代碼:

public void Page_Load(object sender, EventArgs e) 
{ 
    if(Request.QueryString["id"] == "4") 
    { 
     Response.Redirect("http://www.google.com"); 
    } 
    else 
    { 
     Response.Redirect("http://www.yahoo.com"); 
    } 
} 
+0

它工作正常,如果我在我的aspx文件中硬編碼它。我想從我的aspx.cs文件中添加click here。我嘗試將它存儲爲一個字符串,並通過element.InnerHtml將其添加到HTML,但它被當作一個字符串,因此它不起作用。請幫助 – Srinivas

1

將runat =「server」添加到您的html標記中,以使您的服務器上可用的元素。 否則,它只是一個html元素和這些顯然不能在服務器上進行訪問......

<a href="#" runat="server" onServerClick="abc_Click" id="4" /> 

你也必須要正確實現的事件處理程序,因爲你的實現是缺少

+0

對不起,我沒有提到。我添加runat =「服務器」,它仍然無法正常工作。 – Srinivas

2

您錯過了參數爲引用這些鏈接服務器端的一個重要屬性:

runat="server" 

應該是這樣的:

<a href="#" runat="server" onServerClick="abc_Click" id="4"/>click</a> 
<a href="#" runat="server" onServerClick="abc_Click" id="5"/>click here</a> 

順便說一句,你是如何動態添加這些的?希望服務器端。因爲如果它們是通過客戶端上的JavaScript添加的,那麼服務器將事件綁定到它們爲時已晚。

還建議您不要創建這些鏈接,因爲它們實際上並沒有鏈接任何東西。 (href="#"只是告訴它去頁面的頂部。)因爲這些應該發佈到服務器來制定一些服務器端操作,它們最好是按鈕。 (順便說一句,這會讓你的操作變得更容易。)如果UX需要,可以將按鈕設置爲鏈接樣式。

你的服務器端的處理程序還需要額外的參數:

protected void abc_Click(object sender, EventArgs e) 

在這種情況下,sender會一直點擊的元素。您可以將其轉換爲該元素的類型,並從中獲取所需的全部信息,包括其屬性.Id

+0

我做了你的建議,但它仍然無法正常工作。 – Srinivas

+0

@Srinivas:你能更具體嗎?它以什麼方式不起作用?客戶端HTML是什麼樣的?提示:如果'runat =「server」'在客戶端發出的HTML中可見,那麼你會以某種方式錯誤地添加這些鏈接。你如何動態地添加它們? – David

+0

函數沒有被調用。瀏覽器中的頁面源視圖顯示runat =「server」。當我點擊鏈接時,該功能沒有被調用。 – Srinivas