`
feipigwang
  • 浏览: 769907 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

自定义验证一种用法:CustomValidator+ICallbackEventHandler

阅读更多

ASP.NET中的CustomValidator可以提供我们发挥无穷的想象力,不过有时候还是有点麻烦,在客户端写复杂的脚本嘛,实在是太麻烦。在服务端写验证嘛,又感觉要做一次提交,总是好像不纯粹。

当然,我们可以用updatepanel来模拟类似ajax的效果,我今天实在是吃饱了没事干了,提供另一种方案来实现无刷新提交+客户端验证+服务端逻辑验证。方法就是:回调

所要实现的业务逻辑依然非常简单,检查用户名是否存在。

aspx的html body的部分很简单,全部是web服务器控件

<body>
<form id="form1" runat="server">
<div>
<span style="">用户名字</span>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="*" ClientValidationFunction="CheckEven"
ControlToValidate="TextBox1" Display="Dynamic"></asp:CustomValidator><br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
</form>
</body>

一个TextBox ,一个对其验证的CustomValidator ,一个测试提交过程的Button 。CustomValidator 有一个客户端验证函数CheckEven。

所以我们看下,改aspx页面的script的定义

<script type="text/javascript" language="javascript">

var isValid = false;

//服务端处理后的回调
function Validata(args, context) {
isValid = args == "true";
}

//CustomValidator需要验证时触发
function CheckEven(source, args) {
//agrs.Value就是对应输入控件包含的值
CallServer(args.Value, null);
//CallServer将需要验证的数据提交到服务器端,然后回调Validata函数
args.IsValid = isValid;
}
</script>

CheckEven函数式当需要客户端验证的时候由CustomValidator 组件激发,需要验证的值将以args.Value的形式传递,验证的结果可以赋值给args.IsValid 。

当我们获取到需要验证的值时,我们用CallServer(args.Value, null)函数提交给aspx.cs中的代码,服务器逻辑验证执行后,将结果传递给客户端的Validata(args, context)函数,其中args就是我们的验证结果。

回调的执行次序有点古怪,你想通了客户端的执行过程后,再往下看。

以下是aspx.cs文件的代码

public partial class WebForm2 : System.Web.UI.Page, ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
string cer = this.ClientScript.GetCallbackEventReference(this, "args", "Validata", "", false);
//我一般是写在配置文件中
string callServerFormat = "function CallServer(args, context) {{ {0} }}";
string callbackScript = string.Format(callServerFormat, cer);
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);
}

#region ICallbackEventHandler 成员

public string GetCallbackResult()
{
return HasName ? "false" : "true";

}

public void RaiseCallbackEvent(string eventArgument)
{
HasName = eventArgument.IndexOf("admin") > -1;
}

private bool HasName
{
set;
get;
}

#endregion

protected void Button1_Click(object sender, EventArgs e)
{
}
}

首先你要关注的是,改page类需要实现ICallbackEventHandler接口。
该接口的两个实现方法,如果我们不必太在意一些规范的术语的话,那么大致就是

RaiseCallbackEvent(string eventArgument)从客户端的CallServer函数中得到需要验证的值eventArgument

string GetCallbackResult()将验证的结果以string的方式返回给客户端的Validata函数中的args

现在我们来关注下最后的关键点,客户端和服务端的桥梁CallServer,CallServer其实就是一个传递参数的函数,在函数我们再load的时候进行注册

string cer = this.ClientScript.GetCallbackEventReference(this, "args", "Validata", "", false);
//我一般是写在配置文件中
string callServerFormat = "function CallServer(args, context) {{ {0} }}";
string callbackScript = string.Format(callServerFormat, cer);
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);

这段代码的直接结果就是当页面生成的时候,在页面中生成以下脚本

function CallServer(args, context) { WebForm_DoCallback('__Page',args,Validata,"",null,false) }

好了,如果你现在吧代码都抄完了,那可以执行下页面看看,是否客户端已经可以完全在没有提交感觉的时候进行了验证!

我的开发环境:VS2008 SP1+XP+IE8

分享到:
评论

相关推荐

    struts2 自定义验证程序的实现方法详解

    ### Struts2 自定义验证程序的实现方法详解 #### 一、Struts2 内建验证程序实现的分析 在探讨如何实现自定义验证程序之前,我们先来了解一下 Struts2 的内置验证机制。Struts2 提供了丰富的内置验证器(Validator...

    .NET 验证控件的应用

    CustomValidator >自定义验证控件允许开发者根据特定业务规则编写验证方法,以满足更为个性化的验证需求。 6.ValidationSummary 验证结果摘要控件功能:汇总页面上所有未通过验证的错误消息,并在一个地方显示。...

    如何使用CustomValidator控件

    `CustomValidator`控件是ASP.NET提供的一种高级验证工具,允许开发者自定义验证逻辑,以满足那些预置验证控件无法覆盖的复杂验证需求。本篇将详细介绍如何使用`CustomValidator`控件进行自定义验证。 首先,我们...

    JSF精美登陆跳转,自定义数据验证

    - customValidator.java:自定义验证器的实现类。 综上所述,这个主题涵盖了JSF中的用户界面设计、数据验证机制以及页面跳转策略,通过自定义验证器和精心设计的登录页面,可以提高用户体验并确保数据的准确性和...

    简单JS自定义验证提示效果

    "工具"可能意味着这个验证方法可以作为一种工具,帮助开发者快速实现表单验证功能。 【压缩包子文件的文件名称列表】"js"可能是包含实现这种验证效果的JavaScript文件。通常,这样的文件可能会命名为如`validation....

    使用CustomValidator自定义验证控件检查是否有对ListBox控件选择

    CustomValidator控件是ASP.NET提供的一种自定义验证控件,允许开发者编写自己的验证逻辑,而不仅仅是依赖于预定义的验证类型。在这个场景中,我们的目标是在用户尝试提交数据时检查ListBox是否至少有一个项目被选中...

    winform 使用CustomValidator源码

    在Windows Forms(WinForm)开发中,自定义验证是实现用户输入验证的一种重要方式,特别是在构建复杂的业务逻辑或满足特定验证规则时。`CustomValidator`控件允许开发者编写自己的验证逻辑,以确保用户输入的数据...

    struts 2.0自定义验证器

    自定义验证器通常是一个实现了`org.apache.struts2.validator.Validator`接口的Java类。你需要覆盖`validate`方法,该方法接受一个`ActionContext`对象和`FieldErrors`对象,用于存放验证错误。在这个方法内,编写...

    ASP.NET中WebValidate验证控件

    在ASP.NET页面中使用自定义验证控件时,你需要像使用其他验证控件一样,将其添加到设计视图或代码中,并设置相应的属性,如`ControlToValidate`(指定需要验证的控件ID)和`ErrorMessage`(显示的错误消息)。...

    asp.net C# 验证控件

    - **CustomValidator**:允许自定义验证逻辑,可以执行复杂的数据验证。 - **ValidationSummary**:显示所有验证错误的汇总,方便用户查看。 2. **验证控件的属性**: - **ControlToValidate**:指定需要验证的...

    验证用户必选CheckBox控件与自定义验证javascript代码

    但我们可以使用asp:CustomValidator来验证,不过还得写自定义验证Javascript代码,可参考如下: 代码如下: function ValidateCheckBox(sender, args) { var checkbox = document.getElementById(“&lt;&#37;=...

    js验证代码大全

    JavaScript(简称JS)是一种轻量级的、解释型的编程语言,主要应用于Web页面和浏览器环境,用于实现客户端的交互性和动态效果。JS验证代码大全是汇集了多种JavaScript验证技术的资源集合,可以帮助开发者在创建网页...

    asp.net 非空验证

    如果内置的验证控件无法满足需求,可以创建自定义验证控件或使用CustomValidator。这允许开发人员编写自己的验证逻辑,以处理更复杂或特定的验证规则。 7. **验证事件**: ASP.NET还提供了一些验证相关的事件,如...

    用CustomValidator控件客户端验证IP地址

    在ASP.NET中,CustomValidator控件是一个非常有用的工具,它允许开发者自定义验证逻辑,以满足特定的验证需求。在本例中,我们探讨的是如何使用CustomValidator控件来实现客户端验证用户输入的IP地址的有效性。...

    Asp.Net验证控件应用--用户注册页面

    3、本程序,采用了非空验证(RequireValidator)、范围验证(RangeValidator)、手机号码以及电子邮件的验证(RegularValidator)、比较验证(CompareValidator)以及自定义验证(CustomValidator),这几种验证控件对于我们...

    验证控件应用.rar

    4. **自定义验证**:CustomValidator控件允许开发者编写自己的JavaScript或C#服务器端验证函数,以处理更复杂的验证逻辑。这可以覆盖预定义验证控件的局限性,实现更个性化的验证规则。 5. **验证摘要**:...

    C#验证控件的使用关于控件

    这是一种非常基本且常用的验证方式,适用于确保所有必要的数据都已由用户输入。 ##### 使用示例 下面是`RequiredFieldValidator`控件的标准代码示例: ```xml &lt;asp:RequiredFieldValidator id="Validator_Name" ...

    asp.net表单验证

    如RequiredFieldValidator(必填字段验证)、CompareValidator(比较验证)、RangeValidator(范围验证)、RegularExpressionValidator(正则表达式验证)、CustomValidator(自定义验证)和ValidationSummary(验证...

    ASP.NET 视频如何使用验证控件

    ASP.NET是一种强大的Web应用程序开发框架,由微软公司推出,它为开发者提供了丰富的工具和功能,使得构建交互式、数据驱动的Web应用变得简单。在这个特定的视频教程中,“ASP.NET 视频如何使用验证控件”显然是关注...

Global site tag (gtag.js) - Google Analytics