奇怪的麻烦 - 无法将javascript分配给linkbutton

时间:2009-02-16 15:18:17

标签: asp.net button hyperlink

我似乎事先多次管理同样的任务;但是目前我完全陷入了最简单的事情,这让我感到非常愤怒

我需要将javascript分配给ASP.Net linkbutton(或超链接,无所谓) 什么似乎更容易?

我用这样的代码做了十亿次

        //lbHeader.Attributes.Add("onclick",
        //    string.Format("ToggleSelectionPopup('{0}');return false;", panelContainer.ClientID));

但它不起作用。我得到的HTML包含javascript:__ doPostback(blahblahblah)并忽略了我的客户端“onclick”功能。相反,当我点击按钮时页面进入回发(尽管“onclick”功能在“视图页面源”HTML中正确附加

我尝试应用一些技巧和方法,如下面的

1)用超链接替换LinkBut​​ton - 效果仍然相同,当我点击href时页面转发到“NavigateURL”。

2)在声明性布局中分配“OnClientClick”properety - 效果相同,页面无论如何转到后面并忽略“onclick”

3)将“javascript:ToggleSelectionPopup(blahblahblah)”指定为超链接的NavigateURL,并指定为linkBut​​ton的PostBackURL。不起作用

两种技巧都没有帮助。我做错了什么想法?

我只需要摆脱该控件的糟糕服务器性能,但我该怎么做呢?当然,我可以手动制作LiteralControl,但我不想使用这种粗略的方法。

高度赞赏

8 个答案:

答案 0 :(得分:4)

您可以使用LinkBut​​ton控件并向OnClientClick添加javascript函数调用。这将在客户端验证之前和回发之前调用(显然)。如果您需要在验证后但在回发之前执行此操作,那么您可以使用'Page_ClientValidate()'在OnClientClick中手动调用客户端验证;

<script type="text/javascript">
function someJsYouWant()
{
  alert('HelloSO');
}
</script>

 <asp:LinkButton ID="btnSearch" 
         runat="server"
         OnClientClick="Page_ClientValidate(); someJsYouWant();"
         onclick="btnSearch_OnClick">Search</asp:LinkButton>

答案 1 :(得分:1)

ASP.NET控件Button和LinkBut​​ton将始终进行回发。您可以使用OnClientClick属性添加的javascript将在回发之前执行,但不会阻止回发。

您可以通过以下方式使用HyperLink控件:

<asp:HyperLink runat="server" ID="hyperlink1" NavigateUrl="JavaScript:alert('!');">Test</asp:HyperLink>

我注意到您使用的是变量名称lbHeader。您确定要将javascript添加到正确的控件而不是某个随机标签吗?

答案 2 :(得分:0)

作为一种选择,您可以尝试 HtmlAnchor 控制。

在onclick属性返回false; 足以停止重定向。

<a href="not_importans.htm" onclick="javascript:someothermethod();return false;">Trial Link</a>

但你的代码看起来不错。你检查LinkBut​​ton的HTML输出? 也许其他代码分配给 onclick 属性。

答案 3 :(得分:0)

您是否忘记将"javascript:"放在字符串的开头? [傻我]

我用于此类事情的代码如下所示:

myLinkButton.SetAttribute("onclick", "javascript:if(someCondition()) return false;");

...但我猜这与Attributes.Add几乎完全相同。

您的代码对我来说听起来很合理。我的猜测是该属性在页面生命周期中被其他内容覆盖。在页面的Render中添加一个断点,然后在那里查看LinkBut​​ton的属性集合。还要检查呈现的HTML,看看你的javascript是否出现在那里。

答案 4 :(得分:0)

由于我不是在.NET中,而是在Html / Javascript / Ajax中,也许我错了,但是如果你使用onclick方式,对于某些浏览器,你还需要添加: href = “JavaScript的:无效(0);”即可。这样,只会执行onclick。

答案 5 :(得分:0)

有点不清楚你想要做什么。你的javascript中有一个无效的if语句。试试这个(它有效 - 我试过了):

hrefHeader.NavigateUrl = String.Format("javascript:toggleSelectionPopup('{0}');", panelContainer.ClientID);

答案 6 :(得分:0)

您确定在致电toggleSelectionPopup时没有收到运行时错误吗?

答案 7 :(得分:0)

谢谢大家,我已经解决了这个问题

javascript:void(0)似乎是一种正确的方式。

以下列方式描述我的超链接

<asp:Hyperlink  ID="hrefHeader" Text="lbHeader" runat="server"  Font-Size="Large" Font-Italic="true" 
 CausesValidation="False"  NavigateUrl="javascript:void(0);" ForeColor="#0033CC" >
</asp:Hyperlink>

“onclick”开始射击。