2013-09-24 39 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