js的返回值是false,为什么还会提交到服务器端继续执行

ASDFX110 2012-03-10 01:03:10
js的返回值是false,用alert弹出的也是false,但是还是提交到了服务端,怎么回事?.aspx代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>


</head>
<body>
<form id="form1" runat="server">
<script language="javascript" type="text/javascript">



function getValue1(){
var a=document.getElementById("tb1").value;
if(!a.match("^[0-9]*$")){
alert("请输入数字");
return false;
}

Default2.getValue(a,callback);
  
}
  
  function callback(res){
  var dt=res.value;
  alert(dt);
  return Boolean(dt);
  
  }

</script>

<div>
<asp:TextBox ID="tb1" runat="server" Height="50px" TextMode="MultiLine"
Width="200px"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="提交"
OnClientClick="return getValue1()" onclick="Button1_Click" /><br/>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
</form>
</body>
</html>


.cs代码:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(Default2));

}


[AjaxPro.AjaxMethod]

public bool getValue(int a)
{
if (a > 5)
{

return true;
}
else
{
return false;
}
}



protected void Button1_Click(object sender, EventArgs e)
{
if (Convert.ToInt32(tb1.Text) <6)
{

Label1.Text = "我不大于5但是被刷新了";
}
else
{
Label1.Text = "正常提交";
}
}

}

...全文
208 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 asdfx110 的回复:]

引用 1 楼 hzzasdf 的回复:

Button 加上UseSubmitBehavior=false属性

加上这个后当JS返回true时不提交
[/Quote]

假设这个以后,你还要改写
 OnClientClick="return getValue1()" 
 OnClientClick="if(!getValue1()) return false;" 
  • 打赏
  • 举报
回复
还有个简单点的方法是,首先加上UseSubmitBehavior=false属性:
<asp:Button ID="Button1" runat="server" Text="提交" UseSubmitBehavior=false
OnClientClick="getValue1() OnClick="Button1_Click" /><br/>

然后修改callback方法:


 function callback(res){
  var dt=res.value;
  if (Boolean(dt)) {
__doPostBack("Button1", null);
}   
  }
  • 打赏
  • 举报
回复
方法有多种,比如:

首先给Button1加上 UseSubmitBehavior=false属性(或者使用<input type="button" />),去掉OnClick:
<asp:Button ID="Button1" runat="server" Text="提交" UseSubmitBehavior=false
OnClientClick="getValue1()" /><br/>

另外加个隐藏的按钮:
<asp:Button id="button2" runat="server" style="display:none" onclick="Button1_Click" />

然后修改callback方法:
  function callback(res){
  var dt=res.value;
  if (Boolean(dt)) {
document.getElementById('button2').click();
}
  
  }
ASDFX110 2012-03-10
  • 打赏
  • 举报
回复
这个应该怎么改呢?
  • 打赏
  • 举报
回复
不好意思搞错了。仔细看了一下,提交的原因是你用了ajax,也就是异步方法,所以程序执行到:

Default2.getValue(a,callback);
这句后,并不会等待返回结果,而是直接返回true了,所以导致回发
ASDFX110 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hzzasdf 的回复:]

Button 加上UseSubmitBehavior=false属性
[/Quote]
加上这个后当JS返回true时不提交
  • 打赏
  • 举报
回复
Button 加上UseSubmitBehavior=false属性
ASDFX110 2012-03-10
  • 打赏
  • 举报
回复
仍然不行啊

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧