Javascript Asp.net。什么&x2019;这是服务器端验证和客户端验证协同工作的最佳方式

Javascript Asp.net。什么&x2019;这是服务器端验证和客户端验证协同工作的最佳方式,javascript,asp.net,validation,Javascript,Asp.net,Validation,我有一个网络表单应用程序 在客户端,我使用自定义JavaScript验证高亮显示文本框,并在文本更改或单击提交按钮时显示验证消息 服务器端验证在提交时进行。它会返回一个消息列表(字符串),以防止系统保存表单 客户端验证是通用的,例如选中“必填字段”、“word limited”,而服务器验证需要处理数据记录,例如“现有名称”,“当表B中有相关记录时,用户必须指定选项“A”。” 服务器端验证的缺点是,它只返回消息摘要,但不能在文本框旁边显示消息。(服务器端如何知道每个控件id或在何处显示每个消息?

我有一个网络表单应用程序

在客户端,我使用自定义JavaScript验证高亮显示文本框,并在文本更改或单击提交按钮时显示验证消息

服务器端验证在提交时进行。它会返回一个消息列表(字符串),以防止系统保存表单

客户端验证是通用的,例如选中“必填字段”、“word limited”,而服务器验证需要处理数据记录,例如“现有名称”,“当表B中有相关记录时,用户必须指定选项“A”。”

服务器端验证的缺点是,它只返回消息摘要,但不能在文本框旁边显示消息。(服务器端如何知道每个控件id或在何处显示每个消息?)

服务器端和客户端验证如何协同工作,以便在每个文本框上显示消息?有什么好的.net设计或架构吗? 确保所有客户端验证将以任何方式在服务器端复制


Thx

IMO ASP.NET验证程序非常好,您可以使用
页面检查服务器端的验证程序。IsValid

如果您不检查每个控件和显示消息框的服务器值或其他任何内容,那么您可以使用
CustomValidator
,使用ajax调用一些服务器端方法并使用该方法进行验证

下面是一个JavaScript函数示例,用于调用服务器端ashx处理程序来检查邮件地址是否有效,这只是一个示例,您可以使用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");
  }
}

IMO ASP.NET验证程序非常好,您可以在服务器端使用
Page.IsValid
检查验证程序

如果您不检查每个控件和显示消息框的服务器值或其他任何内容,那么您可以使用
CustomValidator
,使用ajax调用一些服务器端方法并使用该方法进行验证

下面是一个JavaScript函数示例,用于调用服务器端ashx处理程序来检查邮件地址是否有效,这只是一个示例,您可以使用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解决方案来实现它。如果服务器验证失败,您可以连接以显示与客户端验证相同的消息。您可以正确地说,在这两种情况下,消息应该是相同的。用户不关心服务器端或客户端的验证是否失败。

一个好的解决方案是使用AJAX提交表单。您可以使用许多可用库中的一个,或者扩展自定义javascript解决方案来实现它。如果服务器验证失败,您可以连接以显示与客户端验证相同的消息。您可以正确地说,在这两种情况下,消息应该是相同的。用户不关心服务器端或客户端的验证是否失败