将linkbutton设置为asp.net中asp:panel的默认按钮[复制]

前端之家收集整理的这篇文章主要介绍了将linkbutton设置为asp.net中asp:panel的默认按钮[复制]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Possible Duplicate:
07000

如何在asp.net中将链接按钮设置为asp:panel的默认按钮?我知道按钮可以设置为默认值,但我的应用程序使用所有表单的链接按钮.任何建议如何做到这一点.

编辑:

现在我试过这个,
它也适用于Firefox,但我的javascript验证(即)onclient点击我的linkbutton不起作用的原因?

  1. var __defaultFired = false;
  2.  
  3. function WebForm_FireDefaultButton(event,target) {
  4. var element = event.target || event.srcElement;
  5.  
  6. if (!__defaultFired && event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) {
  7. var defaultButton;
  8.  
  9. if (__nonMSDOMBrowser)
  10. defaultButton = document.getElementById(target);
  11. else
  12. defaultButton = document.all[target];
  13.  
  14. if (defaultButton) {
  15. if (typeof (defaultButton.click) != "undefined")
  16. defaultButton.click();
  17. else
  18. eval(unescape(defaultButton.href.replace("javascript:","")));
  19.  
  20. event.cancelBubble = true;
  21.  
  22. if (event.stopPropagation) event.stopPropagation();
  23. return false;
  24. }
  25. }
  26. return true;
  27. }

第二次编辑:

我能够使我的自定义linkbutton控件工作,但无法将OnClientClick挂钩到它.来源using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net.

我这样做了

  1. <%@ Register Namespace="App_Code" TagPrefix="ac" %>
  2. <asp:Label runat="server" ID="lblHello" />
  3. <asp:Panel runat="server" DefaultButton="lbHello">
  4. First name: <asp:TextBox runat="server" ID="txtFirstName" />
  5. <ac:LinkButtonDefault ID="lbHello" runat="server" Text="Click me"
  6. OnClientClick="javascript:alert('hai');" OnClick="lbHello_Click" />
  7. </asp:Panel>

我的客户端功能不起作用?任何建议.

解决方法

您可以采用添加属性的简单方法来处理文本框的onKeyPress事件,而不是使用自定义控件.这正确处理从文本框中按Enter键并触发LinkBut​​ton事件.这种方法的缺点是在Firefox中不会触发任何LinkBut​​ton OnClientClick事件,这与您链接到的博客文章中描述的问题有关.只有当用户用鼠标实际点击链接时才会触发它.但是,在IE中,它将从文本框和直接单击触发.

解决方案#1 – 添加属性代码如下:

  1. protected void Page_Load(object sender,EventArgs e)
  2. {
  3. txtFirstName.Attributes.Add("onKeyPress","javascript:if (event.keyCode == 13) __doPostBack('" + lbHello.ClientID + "','')");
  4. }

试试看,看看它是否符合你的需求.请记住我之前描述的限制.

现在,如果您希望上述限制消失,那么该博客文章中的one of the comments显示了一种似乎正常工作的方法.我已经修改它以摆脱StringBuilder并将其转换为C#.

解决方案#2 – 添加函数注册它的代码如下:

  1. protected void Page_PreRender(object sender,EventArgs e)
  2. {
  3. string addClickFunctionScript = @"function addClickFunction(id) {
  4. var b = document.getElementById(id);
  5. if (b && typeof(b.click) == 'undefined')
  6. b.click = function() {
  7. var result = true;
  8. if (b.onclick) result = b.onclick();
  9. if (typeof(result) == 'undefined' || result)
  10. eval(b.getAttribute('href'));
  11. }
  12. };";
  13.  
  14. string clickScript = String.Format("addClickFunction('{0}');",lbHello.ClientID);
  15.  
  16. Page.ClientScript.RegisterStartupScript(this.GetType(),"addClickFunctionScript",addClickFunctionScript,true);
  17. Page.ClientScript.RegisterStartupScript(this.GetType(),"click_" + lbHello.ClientID,clickScript,true);
  18. }

页面标记
两种上述解决方案的页面标记相同:

  1. <asp:Label runat="server" ID="lblHello" />
  2. <asp:Panel ID="Panel1" runat="server" DefaultButton="lbHello">
  3. First name:
  4. <asp:TextBox runat="server" ID="txtFirstName" />
  5. <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click"
  6. OnClientClick="javascript:alert('Hello,World!');"/>
  7. </asp:Panel>

在这两种情况下,都不需要自定义控件来实现此类功能.把事情简单化.

猜你在找的asp.Net相关文章