【问题标题】:set linkbutton as default button for asp:panel in asp.net [duplicate]在 asp.net 中将链接按钮设置为 asp:panel 的默认按钮 [重复]
【发布时间】:2010-08-27 04:40:50
【问题描述】:

可能重复:
Link Button on the page and set it as default button, work fine in IE but not in Mozila

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

编辑:

现在我试过了, 它也可以在 Firefox 中使用,但是我的 javascript 验证(即)客户端点击我的链接按钮不起作用,为什么?

var __defaultFired = false;

        function WebForm_FireDefaultButton(event, target) {
            var element = event.target || event.srcElement;

            if (!__defaultFired && event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) {
                var defaultButton;

                if (__nonMSDOMBrowser)
                    defaultButton = document.getElementById(target);
                else
                    defaultButton = document.all[target];

                if (defaultButton) {
                    if (typeof (defaultButton.click) != "undefined")
                        defaultButton.click();
                    else
                        eval(unescape(defaultButton.href.replace("javascript:", "")));

                    event.cancelBubble = true;

                    if (event.stopPropagation) event.stopPropagation();
                    return false;
                }
            }
            return true;
        }

第二次编辑:

我能够使我的自定义链接按钮控件正常工作,但无法将 OnClientClick 挂接到它。来源using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net

我做到了,

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

为什么我的客户端功能不起作用?任何建议。

【问题讨论】:

    标签: asp.net panel linkbutton defaultbutton


    【解决方案1】:

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

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

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

    尝试一下,看看它是否符合您的需求。请记住我之前描述的限制。

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

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

    protected void Page_PreRender(object sender, EventArgs e)
    {
        string addClickFunctionScript = @"function addClickFunction(id) {
               var b = document.getElementById(id);
               if (b && typeof(b.click) == 'undefined')
                 b.click = function() {
                   var result = true;
                   if (b.onclick) result = b.onclick();
                   if (typeof(result) == 'undefined' || result)
                     eval(b.getAttribute('href'));
                 }
             };";
    
        string clickScript = String.Format("addClickFunction('{0}');", lbHello.ClientID);
    
        Page.ClientScript.RegisterStartupScript(this.GetType(), "addClickFunctionScript", addClickFunctionScript, true);
        Page.ClientScript.RegisterStartupScript(this.GetType(), "click_" + lbHello.ClientID, clickScript, true);
    }
    

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

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

    在这两种情况下,都不需要自定义控件来实现此类功能。保持简单。

    【讨论】:

    • 我已经把它授予你了。还有一个疑问是如何让我的所有具有不同链接按钮的 aspx 页面都可以重用它......
    • 帮我解决这个问题stackoverflow.com/questions/3642269/…
    • @Pandiya 我已经发布了对您的新问题的回复。它需要一个深入的帖子,因此延迟。希望这会为您指明正确的方向。
    【解决方案2】:

    看看这个

    <asp:Panel runat="server" DefaultButton="lbHello">
        First name: <asp:TextBox runat="server" ID="txtFirstName" />
        <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click" />
    </asp:Panel>
    

    其余的答案可以在这里找到。它展示了如何解决 FireFox 出现的问题
    http://kpumuk.info/asp-net/using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net/

    【讨论】:

    • 我尝试了同样的方法,但它在 Firefox 中不起作用
    • 任何让它在 Firefox 中工作的建议
    • 对不起,没有。看起来好像该帖子回答了Firefox的问题,但也许FF的后期版本重新破坏了代码......不确定。
    【解决方案3】:

    另一种方法可能是像这样伪造 onclick 事件。

    jQuery(document).ready(function () {
        jQuery('#<%= txtFirstName.ClientID %>').keypress(function (event) {
            if (event.keyCode == 13) {
                eval($('#<%=lbHello.ClientID %>').attr('href'));
            }
        });
    });
    

    缺点是您需要在所有需要制作默认按钮的地方使用它。

    【讨论】:

      【解决方案4】:

      看到这个

      Link Button on the page and set it as default button, work fine in IE but not in Mozila

      虚拟按钮答案是 IMO 最干净的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多