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

时间:2010-01-26 14:45:12

标签: c# asp.net onclientclick

我在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. 确保用户点击删除按钮时出现确认窗口,只有在确认删除后才会继续?

  3. 由于

    乔恩

    修改

    我刚才拥有的一个想法就是让所有按钮在返回时都没有提交回来,并挂钩一些JQuery来监听Return并为我想要的按钮做提交,(不知道怎么做直接做那件事。)

1 个答案:

答案 0 :(得分:3)

这里发生的事情是,当您在按钮中设置UseSubmitBehavior =“true”时,该按钮将呈现为。这使用按下输入按钮时提交表单的浏览器默认行为。但是如果你设置UseSubmitBehavior =“false”,但是按钮被渲染为;并且,onclick事件(在客户端中)连接到提交表单的'__doPostBack()'。

问题是,如果向OnClientClick属性添加任何内容,它将在__doPostBack()之前运行。如果返回true或false,它将结束onclick事件的处理,因为返回了一个值,并且__doPostBack()永远不会被触发。以下是渲染标记的外观:

<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,则不会发生任何其他事情。