Asp.net Page_ClientValidate 的应用和跳过

其实网上说道的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");

}

是等价的。

时间: 2024-08-01 11:19:10

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

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

本文翻译自 Samer Abu Rabie 的 <Redirect and POST in ASP.NET> 简介 在实际项目中,我们会遇到这样一种应用场景:我们需要与第三方的应用程序通信,在某些特定的情形下,我们不得不使用 POST 请求而非 GET 请求传递信息. 背景 起初,这个问题看起来很简单,但实际并不是那样.我很努力地寻求这个问题的解决方法,仔细谷歌搜索之后发现并没有让我满意的较好解决方案.让我们先来看看向指定的目的URL发送数据(包括POST和GET)有哪些可选方法: 1. Re

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

return RedirectToAction("Test", new { cw = cw, firstdirectoryid = firstdirectoryid }); 上式中cw是一个对象,按上式传递参数后,在Test中收不到对象cw,但firstdirectoryid可以接收到. RedirectToAction函数允许传递一系列的objects,但在实践中发现,这些所谓的objects,并不是真正的objects,调用者 若传递出object reference,接收者得到的

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

需求:先Post提交数据,然后跳转到目标页面 找了好久才发现这个神奇的类HttpHelper.原理很简单,利用html的from表单拼接,然后执行 使用方法: NameValueCollection data = new NameValueCollection(); data.Add("v1", "val1"); data.Add("v2", "val2"); HttpHelper.RedirectAndPOST(this.P

ASP.NET MVC AuthorizeAttribute OnAuthorization 验证跳转&lt;转载&gt;

重写 AuthorizeAttribute 的 OnAuthorization 方法: using System.Web.Mvc; namespace Demo.Web.Common { public class AuthorizeUserAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { base.OnAuthorization(f

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

一.在要检查登入的控制器上继承 CheckLoginController 类 2. CheckLoginController 类的写法 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace TaskManagement.Controllers { public class CheckLoginController :

ASP.Net 设置 404错误跳转到指定页面

分享 ASP.Net 网站设置 404错误跳转到指定页面的三种方法 方法一:Web.config 配置 1 首先双击打开项目中的“Web.config”文件  找到 system.web 节点,在 customErrors 节点中添加 mode 为 on,然后把图中“404.html"替换成你需要的文件路径名,如图所示(如果没有此节点,请手 动添加上,代码有智能提示,很方便添加) 重新编译后,即跳转到指定的页面中. 方法二:Global.asax 配置 同样在项目中找到并双击打开“Global.

asp.net跳转页面的三种方法比较

目前,对于学习asp.net的很多朋友来讲,实现跳转页面的方法还不是很了解.本文将为朋友们介绍利用asp.net跳转页面的三种方法,并对其之间的形式进行比较,希望能够对朋友们有所帮助. ASP.NET发展起源 1 ASP.NET的前身ASP技术,是在IIS 2.0上首次推出(Windows NT 3.51),当时与 ADO 1.0 一起推出,在IIS 3.0 (Windows NT 4.0)发扬光大,成为服务器端应用程序的热门开发工具,微软还特别为它量身打造了Visual InterDev开发工

详细介绍ASP.NET页面重定向方法

ASP.NET中页面重定向的使用的很频繁,实现方法也有不同,自己也试过几种,现在总结一下. 一.Transfer Execute Redirect重定向方法介绍 1.Server.Transfer方法:  Server.Transfer("m2.aspx"); //页面转向(服务器上执行).服务器停止解析本页,保存此页转向前的数据后,再使页面转向到m2.aspx, 并将转向前数据加上m2.aspx页结果返回给浏览器. 2.Server.Execute方法:  Server.Execut

常用的js跳转页面方法实现汇总

1.window.location.href方式 <script language="javascript" type="text/javascript"> window.location.href="target.jsp"; </script> 2.window.navigate方式跳转 <script language="javascript"> window.navigate(&quo