Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 何时调用服务器onClick vs OnClientClick_Javascript_Asp.net - Fatal编程技术网

Javascript 何时调用服务器onClick vs OnClientClick

Javascript 何时调用服务器onClick vs OnClientClick,javascript,asp.net,Javascript,Asp.net,有人能解释一下为什么单击了btnSaveFile1,调用了onClientClick(),如果onClientClick()返回true,它会调用服务器,但是如果onClientClick()返回false,它不会调用服务器。我完全理解 但是,btnSaveFile2为什么不管onClientClick()返回什么,它似乎都不会调用服务器呢 为什么返回false必须是内联的吗 <asp:Button ID="btnSaveFile1" runat="server" Text="Save"

有人能解释一下为什么单击了btnSaveFile1,调用了onClientClick(),如果onClientClick()返回true,它会调用服务器,但是如果onClientClick()返回false,它不会调用服务器。我完全理解

但是,btnSaveFile2为什么不管onClientClick()返回什么,它似乎都不会调用服务器呢

为什么返回false必须是内联的吗

<asp:Button ID="btnSaveFile1" runat="server" Text="Save" OnClientClick="if(!onClientClick()){return false;}" OnClick="btnSaveFile_Click" UseSubmitBehavior="false" />


<asp:Button ID="btnSaveFile2" runat="server" Text="Save" OnClientClick="return onClientClick()" OnClick="btnSaveFile_Click" UseSubmitBehavior="false" />


 <script type="text/javascript">   
       function onClientClick() {
            if (CurrentMemberValidatedWindow()) {
                if (!ValidateForm()) {
                    return false;
                }
            }
            else {
                DeleteInvalidFiles();
                return false;
            }
            return true;
        }
 </script>

函数onClientClick(){
如果(CurrentMemberValidatedWindow()){
如果(!ValidateForm()){
返回false;
}
}
否则{
DeleteInvalidFiles();
返回false;
}
返回true;
}

TL;DR:删除
使用submitbehavior=“false”

详细解释:

使用UseSubmitBehavior属性指定按钮控件 使用客户端浏览器的提交机制或ASP.NET回发 机制。默认情况下,此属性的值为true,导致 按钮控件以使用浏览器的提交机制如果您指定 如果为false,ASP.NET页面框架会将客户端脚本添加到页面中 将表单发布到服务器。

如果查看页面源代码,呈现按钮的
onclick
不仅仅是
“If(!onClientClick()){return false;}”
“return onClientClick();”
,因为它必须添加客户端脚本来发布表单。现在,第一个按钮是:

"if(!onClientClick()){return false;};__doPostBack('ctl00$MainContent$btnSaveFile1','')"
第二次是

"return onClientClick();__doPostBack('ctl00$MainContent$btnSaveFile2','')"
因此,您可以在案例2中看到,如果它返回
true
,它将不会到达实际提交表单的脚本。(按钮1的情况并非如此,它确实到达脚本并因此提交表单)