ASP.NET:如果使用onclick,则不会调用OnServerClick事件处理程序

时间:2009-08-07 14:27:38

标签: asp.net events onclick htmlbutton

我这里有一个特殊的问题,我的生活无法弄清楚解决方案是什么。请注意,以下代码是 not 动态创建的,但只是在我的aspx文件中。

<button type="button" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?');">
    Submit
</button>

只要我那里有onclick属性,即OnServerClick处理程序被激活,它就可以正常工作。但是当我使用onclick属性时,无论是否确认或拒绝确认对话框都不是。

我做错了什么?感谢

8 个答案:

答案 0 :(得分:15)

如果查看生成的源代码,您将看到以下内容:

onclick="return confirm('Sure?'); __doPostBack('btnSubmit','')"

所以发生的事情是永远不会调用_doPostBack。做你正在寻找的东西的hacky方法如下:

<button type="button" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="if (confirm('Sure?')) ">

真正正确的方法是使用Web Control:

<asp:Button runat="server"
        OnClick="btnSubmit_Click" OnClientClick="return confirm('Sure?')" Text="Submit" />

答案 1 :(得分:3)

我在

方面取得了更大的成功
<asp:Button ID="btnSubmit" runat="server" Text="Save" UseSubmitBehaviour="false"
OnClick="btnSubmit_Click" OnClientClick="if (!confirm('Sure?')) return" />

答案 2 :(得分:2)

接受的答案并不完美。如果您不使用type="button",即使您已点击取消,网页也会进行回发。最正确和最简单的方法是利用short-circuit evaluation并执行此操作:将;替换为&& !,如下所示。

<button runat="server" id="btnSubmit"
        OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?') && !">

输出将如下所示:

<button id="btnSubmit"
        onclick="return confirm('Sure?') && ! __doPostBack('btnSubmit','')">

它提供了正确的返回值,因为true && !undefined将返回true并且undefined将被评估,false && !undefined将返回falseundefined将不评估哪个是我们想要的。

答案 3 :(得分:1)

听起来像onclick事件没有冒泡。

你应该能够使用

OnClientClick="return confirm('Sure?');

我不认为其他onClick应该是必要的。

编辑:

此方法需要您手动将函数挂钩到OnClick事件。


我今天早上正在弥补属性,所以徒劳地努力赎回自己 -

另一种方法是插入javascript来捕获事件。像...这样的东西。

$("form").submit(function() {

        var resp = confirm("Save & Submit?");
        if (resp) {
            serializeStats();
            return true;
        }
        else {
            return false;
        }

    });

我确实记得有更好的内联方式来做到这一点。 咖啡因时间现在。

答案 4 :(得分:1)

如何更改要提交的按钮类型,它运作良好:

<button type="submit" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?');">
    Submit
</button>

答案 5 :(得分:1)

试试这个:

<button type="button" runat="server" id="btnSubmit"
OnServerClick="btnSubmit_Click" onclick="if(!confirm('Sure?')) return;">
Submit
</button>

答案 6 :(得分:0)

&LT;按钮&GT;是一个HtmlButton控件,其中OnServerClick是唯一的服务器端单击事件。 ASP.NET无法识别OnClick,因此如果您希望在回发之前执行某些客户端javascript代码,它将完整地传递给客户端。

&LT; ASP:按钮&GT;是一个WebControl,它使用OnClick服务器端事件和OnClientClick实现客户端相同的功能。

我认为你得到了你看到的行为,因为你的确认('确定?')返回false,这会停止回发机制。这可以解释为什么当你没有onclick就可以了。

答案 7 :(得分:0)

前台

following

后台

//h1/following::h2/following::h3/following::h4/following::h5/following::h6