我正在动态创建一个链接。链接的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;
}
更新:非常感谢,所有:)我将使用LinkButton,如上面的更新代码所示。 但是我忘了问:有一个与获取URL所需的每个链接相关联的密钥。我怎么能
答案 0 :(得分: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.
}
[编辑 - 在回答编辑过的问题时,您可以在使用LinkButton时访问属性CommandName和CommandArgument,它应该执行您需要的操作。但是,我觉得这部分现在应该是一个单独的问题。]
答案 1 :(得分:3)
另一种方法是使用ASP按钮而不是Hyperlink,并将GetLinkUrl
函数绑定到按钮的单击处理程序中。然后运行Response.Redirect('yourURL')
以执行链接。
编辑:正如Adrian所说,LinkButton将是两个世界中最好的 - 它的样式就像一个超级链接,但你可以设置一个点击处理程序来动态获取URL,<实际点击按钮时强>仅。