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解决方案来实现它。如果服务器验证失败,您可以连接以显示与客户端验证相同的消息。你说的正确的是,在这两种情况下,消息应该是相同的。用户不关心服务器或客户端的验证是否失败。