1

我正在动态创建链接。链接的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 所需的密钥相关联。我怎样才能

4

2 回答 2

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.
}

[编辑 - 在回答已编辑的问题时,您可以在使用 LinkBut​​ton 时访问属性 CommandName 和 CommandArgument,这应该可以满足您的要求。但是,我确实觉得那部分现在应该是一个单独的问题。]

于 2013-07-15T10:03:27.293 回答
3

一种替代方法是使用 ASP 按钮而不是超链接,并将GetLinkUrl函数绑定在按钮的单击处理程序中。然后运行Response.Redirect('yourURL')执行链接。

编辑:正如 Adrian 上面所说,LinkBut​​ton 将是两全其美的 - 它的样式类似于超链接,但您可以为其设置点击处理程序以动态获取 URL,当实际点击按钮时。

于 2013-07-15T10:00:25.900 回答