其实网上说道的Page_ClientValidate的博客其实有很多。这里就不列举了,最近在开发遇到一个问题给大家分享一下, 整理后的代码 如下:

HTML code,

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ClientValid.aspx.cs" Inherits="WebApp.ClientValid" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"> <title></title>
<script type="text/javascript" src="js/jquery.1.83.min.js"></script>
<script type="text/javascript">
function ValidationFees() {
var btnAdd = $("#btnAdd");
Page_ClientValidate();
if (Page_IsValid) {
btnAdd.attr("disabled", "disabled");
__doPostBack("btnAdd", "");
return true;
}
} function CancelFinancial() {
Page_ClientValidate();
$("#btnCancel").attr("disabled", "disabled");
__doPostBack("btnCancel", "");
return true;
} </script>
</head>
<body> <form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div> <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvName" runat="server" ErrorMessage="name is required" ControlToValidate="txtName"></asp:RequiredFieldValidator>
<asp:Label ID="labMsg" runat="server" Text=""></asp:Label>
<br />
<asp:Button ID="btnAdd" runat="server" UseSubmitBehavior="false" OnClientClick="return ValidationFees();" Text="Add" CssClass="button"
onclick="btnAdd_Click" />
<asp:Button ID="btnCancel" runat="server" OnClientClick="return CancelFinancial();" Text="Cancel" CausesValidation="false" CssClass="button"
onclick="btnCancel_Click" />
</div>
<%-- <script type="text/javascript">
function WebForm_OnSubmit() {
// if (typeof (ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
</script>--%>
</form>
</body>
</html>

C#的code 就忽略它吧。

一般asp:Button 的CausesValidation属性就是控制 在提交前是否进行客服端验证。这里的btnCancel按钮应该不进行客服端验证,就算验证 没通过也是可以发起post请求的啊。CausesValidation属性究竟是什么了,让我们看看生成的HTML code,

 <input type="submit" name="btnAdd" value="Add" onclick="return ValidationFees();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;btnAdd&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="btnAdd" class="button" />
<input type="submit" name="btnCancel" value="Cancel" onclick="return CancelFinancial();" id="btnCancel" class="button" />
</div>

CausesValidation为true的时候会有WebForm_DoPostBackWithOptions客户端function实现验证。我以前自己code的时候CancelFinancial函数一般如下,

function CancelFinancial() {
$("#btnCancel").attr("disabled", "disabled");
__doPostBack("btnCancel", "");
return true;
}
这样btnCancel的服务端 函数一定执行,但是增加了Page_ClientValidate()过后,btnCancel的服务端 函数还执行吗?我这边测试出来 是不执行的。那我们把函数改为如下:

function CancelFinancial() {
Page_ClientValidate();
__doPostBack("btnCancel", "");
return true;
}

这样保留   Page_ClientValidate(); 而删除__doPostBack("btnCancel", ""); 测试后发现服务端 函数 触发。由于项目时间比较紧张当时我没有找到具体原因,真实项目比这个的demo复杂,发现移除 Page_ClientValidate();或者$("#btnCancel").attr("disabled", "disabled");还是没有在验证不过的情况下触发服务器端函数。于是解决方案就是修改WebForm_OnSubmit函数,

<script type="text/javascript">
function WebForm_OnSubmit() {
// if (typeof (ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
</script>

这样一来btnCancel的服务端函数就执行(在客户端验证没过的情况下),btnAdd在客户端验证没过是不会执行的(根据当前的js函数,主要是btnAdd在这里是一个普通的button而不是一个submit的按钮)。

所以一般情况按钮提交前需要执行Page_ClientValidate函数 建议设置CausesValidation=true,而不是客服端调用 Page_ClientValidate函数,如果需要调用该函数请不要把按钮设置为disabled状态。应为从目前code来看

Page_ClientValidate();
$("#btnCancel").attr("disabled", "disabled");
__doPostBack("btnCancel", "");

if(Page_ClientValidate())
{

$("#btnCancel").attr("disabled", "disabled");
__doPostBack("btnCancel", "");
}

else{

$("#btnCancel").attr("disabled", "disabled");

}

是等价的。

Asp.net Page_ClientValidate 的应用和跳过的更多相关文章

  1. asp.net中几个网页跳转的方法及区别

    1:注意:Response.Redirect("a.html")是不能跳出框架.IFRAME的. 可以使用 Response.Write("<script Lang ...

  2. ASP.NET 中 POST 数据并跳转页面(译自 Redirect and POST in ASP.NET)

    本文翻译自 Samer Abu Rabie 的 <Redirect and POST in ASP.NET> 简介        在实际项目中,我们会遇到这样一种应用场景:我们需要与第三方 ...

  3. asp.net MVC4在Action间跳转 RedirectToAction 传值参数问题

    return RedirectToAction("Test", new { cw = cw, firstdirectoryid = firstdirectoryid }); 上式中 ...

  4. 【记录】ASP.NET MVC AuthorizeAttribute OnAuthorization 验证跳转

    重写 AuthorizeAttribute 的 OnAuthorization 方法: using System.Web.Mvc; namespace Demo.Web.Common { public ...

  5. ASP.NET MVC location.href不跳转

    表单使用submit导致不跳转 <button type="button">

  6. ASP.NET中POST数据并跳转页面

    需求:先Post提交数据,然后跳转到目标页面 找了好久才发现这个神奇的类HttpHelper.原理很简单,利用html的from表单拼接,然后执行 使用方法: NameValueCollection ...

  7. ASP.NET MVC Session 过期验证跳转至登入页面

    一.在要检查登入的控制器上继承 CheckLoginController 类 2. CheckLoginController 类的写法 using System; using System.Colle ...

  8. Asp.Net里关于Session过期跳转页面的一些小技巧

    这里算是自己的个人随笔吧,仅供参考使用,后续有更好的方法再做补充 之前在Aspx页面里面,在Session过期的时候我经常会使用 Server.Transfer("b.aspx") ...

  9. asp.net mvc 在JS中跳转到其它controller/action

    平时在ASP.NET 中经常这样写, $('#loginOut').click(function() {           $.messager.confirm('系统提示', '您确定要退出本次登 ...

随机推荐

  1. react的非DOM操作

    非dom属性?dangerouslySetInnerHTML,ref,key非dom标准属性,也就是说dom标准里面没有规定的属性,react引入了三个非dom属性,如上. dangerouslySe ...

  2. BZOJ2160: 拉拉队排练

    Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...

  3. 【bzoj 1076】【SCOI2008】奖励关

    1076: [SCOI2008]奖励关 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1602  Solved: 891[Submit][Status ...

  4. QNJR-GROUP/EasyTransaction: 依赖于Spring的一个柔性事务实现,包含 TCC事务,补偿事务,基于消息的最终一致性事务,基于消息的最大努力交付事务交付QNJR-GROUP/EasyTransaction: 依赖于Spring的一个柔性事务实现,包含 TCC事务,补偿事务,基于消息的最终一致性事务,基于消息的最大努力交付事务交付

    QNJR-GROUP/EasyTransaction: 依赖于Spring的一个柔性事务实现,包含 TCC事务,补偿事务,基于消息的最终一致性事务,基于消息的最大努力交付事务交付 大规模SOA系统的分 ...

  5. (转载)Spring 注解@Component,@Service,@Controller,@Repository

    Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...

  6. HDU 4771 Stealing Harry Potter's Precious (2013杭州赛区1002题,bfs,状态压缩)

    Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  7. BTrace housemd TProfiler

    http://blog.csdn.net/y461517142/article/details/26269529 http://calvin1978.blogcn.com/articles/btrac ...

  8. PHP 7 来了,PHP 6 去哪儿了?

    PHP7来了,那么PHP6去哪儿了呢? PHP7简介 PHP7是PHP编程语言全新的一个版本,主要在性能方面获得了极大的提升.官方的文档显示,PHP7可以达到PHP5.x版本两倍的性能.同时还 对PH ...

  9. 阅读Linux内核源码时建立tags索引

    比如在阅读arm架构的Linux内核代码时想建立arm架构相关的索引,可以使用下面的命令: make ARCH=arm tags

  10. C#把数组中的某个元素取出来放到第一个位置

    如何取出数组中符合某种条件的元素,然后放在数组最前面,即索引为0的位置? 思路大致如下:→找到符合条件的数组元素,把之赋值给一个临时变量temp,并记下该数组元素的索引位置,假设是index→在源数组 ...