Asp.net。什么是最好的方式,服务器端验证和客户端验证一起工作很好
我有一个webform应用程序。Asp.net。什么是最好的方式,服务器端验证和客户端验证一起工作很好
在客户端,我使用自定义JavaScript验证来高亮文本框,并在文本被更改或单击提交按钮时显示验证消息。
服务器端验证发生在提交。它带回一列消息(字符串)以防止系统保存表单。
客户端验证是通用的,例如,在服务器验证需要处理数据记录时检查“必填字段”,“有限字”, “现有名称”,“当表B中存在相关记录时,用户必须指定选项'A'。”
服务器端验证的缺点是它只带回消息摘要,但不能显示消息在文本框旁边。 (服务器端如何知道每个控件ID或在哪里显示每个味精?)
服务器端和客户端验证如何一起工作以显示每个文本框的味精?任何漂亮的设计或.NET体系结构? 肯定所有的客户端验证都会以任何方式复制到服务器端。
THX
IMO ASP.NET验证器是很不错的,你可以检查服务器端验证与Page.IsValid
。
如果您不会检查每个控件的显示器消息框的服务器值或其他值,则可以使用CustomValidator
并使用ajax调用某个服务器端方法并将其用于验证。
这是CustomValidator
调用服务器端ashx处理程序的JavaScript函数的示例,以检查邮件地址是否有效,这只是一个示例,您可以使用ASP.NET为调用服务器端提供的其他方法(服务,页面方法等等)
只是一个注意:这不是服务器侧验证的替代,你仍然需要,因为这可以很容易地避免。
function IsEmailValid(val, args) {
var strUrl = "/SiteHandler.ashx?CheckEmail=" + args.Value;
var strReturn = "";
$.ajax({
url: strUrl,
success: function (html) { strReturn = html; },
async: false
});
args.IsValid = strReturn == "true";
}
设置,其功能是自定义的验证:
customValidator.ClientValidationFunction = "IsEmailValid";
在服务器端在ashx的处理程序:
public void ProcessRequest(HttpContext context)
{
if (context.Request.Params["CheckEmail"] != null)
{
if (CallSomeCustomLogicAndReturnIsMailOK(context.Request.Params[CheckEmail]))
context.Response.Write("true");
else
context.Response.Write("false");
}
}
一个很好的解决办法是使用AJAX来提交表单。您可以使用许多库中的一个,或者扩展您的自定义JavaScript解决方案来实现它。如果服务器验证失败,您可以连接以显示与客户端验证相同的消息。你说的正确的是,在这两种情况下,消息应该是相同的。用户不关心服务器或客户端的验证是否失败。