65.9K
CodeProject 正在变化。 阅读更多。
Home

同步 PageMethod 自定义验证控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (4投票s)

2009年5月1日

CPOL

2分钟阅读

viewsIcon

46758

downloadIcon

704

这个自定义验证器允许你调用你的 PageMethods 来验证客户端输入,并在出错时阻止回发。

引言

这个控件允许你提供需要服务器端代码的项目友好的验证。 它允许你使用 PageMethods 和 JSON 无需回发地验证这些项目。

背景

本文是两篇优秀文章的结果,它们对本文贡献很大。 首先,Artiom Chilaru 的 在验证器中使用 PageMethods 的文章。 那里的问题是验证器是异步的,因此在必须阻止存在任何验证错误的回发的情况下很难使用。

第二个是 Sandip Patel 的关于同步 AJAX 调用。 这是我构建此控件以执行我想要执行的操作所需的缺失链接,即适应其他验证器的工作方式,并在客户端验证错误时阻止回发。

使用代码

此控件可以直接添加到任何启用 AJAX 的网站项目。 我建议将其添加到单独的控件库项目中,以便轻松地将其放入工具箱中,而无需依赖已编译的网站版本。

添加到页面后,你应该填写 WebMethodControlToValidate 属性。 之后,填写其余部分,使其与其余客户端验证样式保持一致,例如 ErrorMessageDisplay

然后,你应该在代码隐藏中创建适当的 PageMethod。 请记住添加适当的引用和 using 语句。 有关 PageMethods 的指南,请点击这里

关于创建 PageMethod 有两个重要点。 一,它必须返回一个布尔值,指示检查是否通过。 第二,它必须接受一个名为“value”的单个字符串参数。 这是一个例子

[WebMethod]
public static bool ValidateUser(string value)
{
    return BaseClass.ValidateUsername(value, GetProject());
}

方法的名称应与你在验证器的 WebMethod 属性中指定的名称相匹配。

就我个人而言,我将大多数这些方法交给执行实际验证的静态 BLL 类。 如果你的站点有许多页面都使用相似或相同的验证规则,这是一个好主意。

关注点

我对 Artiom 的原始文章进行了一个修改,使其可以与无 Cookie 会话一起使用。 本质上,它设置了用于访问 PageMethod 的路径,以排除会话密钥。

我想再次感谢 Artiom 和 Sandip 的优秀文章。 它们对我帮助很大,我相信它们将来会帮助很多人。

使用此控件的一个好场景是,当你拥有诸如在回发时打开的拼写检查器之类的东西时,你不想在回发后返回带有验证错误的表单,除非在非常特殊的情况下。

我希望这个控件能帮助你完成你自己的项目,就像它帮助我完成我的项目一样。

历史

  • 版本 1.0 - 发布到 Code Project。
  • 2009 05 05 - 添加了演示项目
© . All rights reserved.