如何在链接onClick上设置链接的NavigateUrl?

时间:2013-07-15 09:56:24

标签: c# asp.net

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

2 个答案:

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

[编辑 - 在回答编辑过的问题时,您可以在使用LinkBut​​ton时访问属性CommandName和CommandArgument,它应该执行您需要的操作。但是,我觉得这部分现在应该是一个单独的问题。]

答案 1 :(得分:3)

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

编辑:正如Adrian所说,LinkBut​​ton将是两个世界中最好的 - 它的样式就像一个超级链接,但你可以设置一个点击处理程序来动态获取URL,<实际点击按钮时强>仅。