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

客户端与服务器(通用)验证逻辑。

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013 年 10 月 11 日

CPOL

4分钟阅读

viewsIcon

5294

客户端和服务器(通用)验证逻辑 用于在服务器端验证输入并在客户端显示响应的逻辑基于

客户端与服务器(通用)验证逻辑


在服务器端对输入进行通用验证并将响应显示在
客户端的逻辑基于 XMLHttpRequest (客户端) 和 XMLDocument (服务器端)。

步骤

1. 首先,使用函数将表单转换为格式良好的 XML 请求
PrepareForm(),此函数以字符串格式返回 XML。

 var PrepareForm = function(e, ID, RequestSender, ShowProgress, ExtraTags);

在上述函数的参数中
e 是包含您的表单元素的容器对象,这些元素将要
提交。这可以是 NULL。
ID 是用于将所有元素发送到服务器的相同容器的替代实现的 ID。或者,这或 e 可以发送为 null。
或者,这或 e 可以发送为 null。
RequestSender 是函数委托或对象,用于将
生成的 XML 发送到服务器。


ShowProgress 是函数委托或对象,用于在处理过程中显示加载器。
生成的 XML 发送到服务器。


ShowProgress 是函数委托或对象,用于在处理过程中在屏幕上显示加载器。
这可以为 null。


ExtraTags 是在发送到服务器之前要添加到请求中的额外标签。
例如,需要向服务器发送步骤信息以处理多个
输入。示例额外标签字符串可以是:“<STEP>1</STEP>”

上述函数可在 DGAjaxForm.js 中找到


2. 接下来,此 XML 字符串使用 ICallBackEventHandler 发送到服务器端,并且在
服务器端,此字符串由实现 ICallBackEventHandler 接口的
函数 RaiseCallbackEvent 获取。
语法
public void RaiseCallbackEvent(String eventArgument)
{
XmlRequest.LoadXml(eventArgument);
}
在上述代码中,从客户端接收到的 XML 字符串由此函数在
eventArgument 变量中接收。为了验证 XML 请求,它被加载到
XMLDocument 对象中,使用 LoadXml 方法,如上所示。


3. 作为 ICallBackEventHandler 的正常行为,在上述函数之后
控制将自动发送到另一个 ICallBackEventHandler 接口
实现的函数,即 GetCallbackResult。
语法
public string GetCallbackResult()
{
}

4. 在上述函数中,可以完成客户端请求的所有处理。

a. 在这里,我们首先可以验证输入。
示例

private Boolean Validate_Form(ref string Error)
{
ValidationHelper Validator = new ValidationHelper();
if (Validator.CheckRequired(ref XmlRequest, ref Error, "txtFirstName", "名字
是必需的!"))
Validator.CheckForCharacters(ref XmlRequest, ref Error, "txtFirstName",
"'&", "单引号(')和“与号”(&) 不允许!");
if (Validator.CheckForCharacters(ref XmlRequest, ref Error,
"txtEmailAddress", "'&", "单引号(')和“与号”(&) 不允许!"))
Validator.CheckAgainstExpression(ref XmlRequest, ref Error,
"txtEmailAddress", @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", "请输入有效的
电子邮件 ID!");
Error = Validator.ErrorXML;
return Validator.IsValid;
}
以上是输入从 XMLRequest 读取并使用 ValidationHelper 对象验证的示例验证函数(其代码可随附)。
使用 ValidationHelper 对象进行验证(相关代码可随附)。
更新后的 GetCallbackResult 函数可能如下所示
public string GetCallbackResult()
{
string Error = "";
if (Validate_Form(ref Error))
{
// 在此处执行您的处理逻辑
}
return Error;
}


5. 对响应中的自定义标签执行自定义实现。
示例
假设,根据要求,用户在处理后将被重定向到特定页面。
处理后。
自定义标签可以这样处理
Error = Error.Replace("{Custom}", "<RedirectUrl><![CDATA[" +
Page.ResolveUrl("Thankyou.aspx") + "]]></RedirectUrl>");

 6. 错误处理
示例
try
{
/// 在此处执行易出错的逻辑
}
catch (Exception Ex)
{
Error = Error.Replace("SUCCESS", "FAILURE");
Error = Error.Replace("{DisplayMessage}", Ex.Message);
}


7. 执行涉及数据库交互的验证
假设,需要对照数据库检查用户名的可用性。
if
(!CheckUsernameAvailibility(XmlRequest.GetElementsByTagName("txtEmailAddress")[0].ChildN
odes[0].Value))
{
Error = Error.Replace("SUCCESS", "FAILURE");
Error = Error.Replace("{DisplayMessage}", "用户名 '" +
XmlRequest.GetElementsByTagName("txtEmailAddress")[0].ChildNodes[0].Value + "' 已被占用,请输
请另外输入一个电子邮件地址以继续!");
return Error;
}


8. 客户端响应加载
正如 ICallBackEventHandler 所实现的,客户端响应处理函数
可以用于此目的。
示例
var HandleResponse = function(arg, context)
在上述函数中
arg 是一个字符串,包含从服务器返回的整个响应 XML,作为
所做处理的响应。
context 是当前回调所处理的上下文 [在此实现中已弃用,并且未在任何地方使用。]
此实现中已弃用,并且未在任何地方使用。]
上述函数已修改,通过以下语句将响应转换为对象。
以下语句。

 var Response = new XML().LoadServerResponse(arg);


这里变量“Response”使用所有标签作为属性进行初始化。只有自定义标签
未处理,可以根据需要进一步提取和处理。

9. 访问和处理响应
a. 按控件的错误
for (var i = 0; i < Response.length; i++) {
if (Response[i].ErrorMsg.toString() != " ") {
///该控件的输入无效
}
else {
/// 该控件的输入有效。
}
}

b. 检查是否成功处理

if (Response.isValid) {}

c. 显示服务器消息(如果有)

if (Response.DisplayMessage != "")

d. 处理自定义标签
var UrlNode = Response.XMLDoc.getElementsByTagName("RedirectUrl");
注意:上述行基于上述第 5 点中陈述的示例
(“对响应中的自定义标签执行自定义实现”)。

 

:: 项目文件可从以下地址下载:

http://LearningGeeks.Brinkster.Net/Validation/DGAjaxForm.js 

 

© . All rights reserved.