代码之家  ›  专栏  ›  技术社区  ›  Jon

当useSubmitBehavior设置为false时,两个asp:Button控件的确认弹出窗口

  •  1
  • Jon  · 技术社区  · 16 年前

    我在ASP.NET(2.0)页中嵌入了一个控件。当控件在页面上时,我希望在按返回键在控件上运行操作时使用默认行为,而不是在页面上执行任何操作。为此,我发现了

    UseSubmitBehaviour="false"
    

    页面上的按钮效果很好。这很好,直到我需要在点击页面上的这个按钮时出现一个确认窗口。当他们按下该按钮时,他们将从系统中永久删除记录,并希望确保他们单击了正确的按钮。按钮如下:

    <asp:Button runat="server" ID="btnDeleteCollationResultstop" Text="Delete Selected" UseSubmitBehavior="true"
    ToolTip="Delete all the selected items in the Collation tool"  OnClick="btnDeleteCollationResults_Click" 
    OnClientClick="return confirm('Are you sure you wish to Delete the selected Item(s)?');" />
    

    如果我设置了,弹出确认窗口将加载并工作。 UseSubmitBehaviour true 但是返回键会触发删除按钮,这也是我不想要的。

    所以我的问题是,我如何才能让它做到以下几点:

    1. 使返回键的默认操作在我的控件上而不是在它所在的页上激发

    2. 确保用户单击“删除”按钮时出现确认窗口,并且仅在确认删除时才继续?

    谢谢

    乔恩

    编辑

    我刚想到的一个方法是,在返回时不提交任何按钮,并钩住一些jquery来监听返回并为我想要的按钮进行提交(但不知道如何立即这样做)。

    1 回复  |  直到 10 年前
        1
  •  3
  •   KevnRoberts    16 年前

    这里所发生的是,当您在按钮中设置useSubmitBehavior=“true”时,按钮将呈现为。这将使用浏览器在按下Enter按钮时提交表单的默认行为。但是,如果设置useSubmitBehavior=“false”,但按钮呈现为;并且,onclick事件(在客户机中)连接到提交表单的“uuDoPostback()”。

    问题是,如果向onclientClick属性添加任何内容,它将在uuDoPostback()之前运行。如果返回true或false,将结束onclick事件的处理,因为返回了一个值,并且uDoPostback()永远不会被激发。呈现的标记如下所示:

    <input type="button" name="button1" value="Click Me" onclick="return confirm('are you sure?');__doPostBack('button1','')" id="button1" />
    

    AjaxControlToolkit有一个控件,如果您想使用它的话,它将使此工作正常。它是confirmbutton控件( http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ConfirmButton/ConfirmButton.aspx )。

    如果您想使用jquery,这里有一个例子,它与confirmbutton控件的作用基本相同。

    您的按钮应该是这样的(请确保删除onclientclick属性):

    <asp:Button ID="button1" runat="server" Text="Click Me" UseSubmitBehavior="false" onclick="button1_Click" />
    

    下面是javascript代码:

    <script type="text/javascript">
        $(function() {
            var btn = $('#<%= button1.ClientID %>');
            var oldScript = btn.attr('onclick');
            btn.attr('onclick', '');
            btn.click(function() {
                if (confirm('click a button.')) {
                    if (oldScript) {
                        if ($.isFunction(oldScript)) {
                            oldScript();
                        } else {
                            eval(oldScript);
                        }
                    }
                    return true;
                } else {
                    return false;
                }
            });
        });
    </script>
    

    基本上,它会删除当前的“onclick”属性值并将其存储在一个临时变量中。然后它将确认连接到“点击”事件。如果确认返回true,它将执行最初“onclick”中的旧脚本。如果确认返回false,则不会发生其他任何情况。

    推荐文章