我已经动态地将链接添加到asp页面。点击后,我调用一个函数。我想找出调用该函数的链接的id。我添加了google.com和yahoo.com来解释我的需求。我希望函数在我原来的场景中从db中提取数据。
<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。
现在我有两个问题。
答案 0 :(得分: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
属性。
答案 1 :(得分:1)
将runat =“server”添加到您的html标记中,以使您的服务器上的元素可用。 否则它只是一个html元素,显然无法在服务器上访问...
<a href="#" runat="server" onServerClick="abc_Click" id="4" />
您还必须正确实现事件处理程序,因为您的实现缺少参数
答案 2 :(得分:1)
您错过了runat-server属性。如果包含此内容,则需要在表单中包含该链接。但是您无法将链接的ID传递给服务器(除非您首先使用JS修改隐藏字段,然后发布隐藏字段)。但是,对于一个相当简单的问题,这是一个非常复杂的解决方案。
最简单的方法是只添加一个查询字符串,然后在Page_Load中执行db调用。
示例:
<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");
}
}