3

我似乎事先多次管理相同的任务;但目前我完全被最简单的事情困住了,这让我很恼火

我需要将 javascript 分配给 ASP.Net 链接按钮(或超链接,没关系) 什么似乎更容易?

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

        //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”属性 - 效果相同,页面无论如何都会回发并忽略“onclick”

3) 将“javascript:ToggleSelectionPopup(blahblahblah)”指定为超链接的 NavigateURL 和链接按钮的 PostBackURL。也不起作用

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

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

帮助高度赞赏

4

8 回答 8

4

You could use the LinkButton control and add a javascript function call to OnClientClick. This will be called before the clientside validation and before the postback (obviously). Should you need to execute this after validation but before the postback then you could call the clientside validation manually in your OnClientClick using 'Page_ClientValidate()';

<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>
于 2009-02-16T15:41:29.187 回答
1

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

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

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

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

于 2009-02-16T15:28:18.283 回答
0

作为一个选项,您可以尝试HtmlAnchor控件。

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

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

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

于 2009-02-16T15:30:52.223 回答
0

As I'm not into .NET, but in Html/Javascript/Ajax, maybe I'm wrong, but if you use the onclick way, for some browsers, you will also have to add : href="javascript:void(0);". This way, only the onclick will be executed.

于 2009-02-16T15:48:25.287 回答
0

It is a bit unclear what you are trying to do. You have an invalid if statement in your javascript. Try this (it works - I tried it):

hrefHeader.NavigateUrl = String.Format("javascript:toggleSelectionPopup('{0}');", panelContainer.ClientID);
于 2009-02-16T16:13:10.467 回答
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”开始开火。

于 2009-02-17T10:57:59.017 回答
0

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

我用于这种事情的代码如下所示:

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

...但我想这与Attributes.Add.

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

于 2009-02-16T15:35:57.467 回答
0

您确定在您的调用中没有收到运行时错误toggleSelectionPopup吗?

于 2009-02-16T16:34:05.003 回答