繁体   English   中英

Asp.net。 服务器端验证和客户端验证很好地协同工作的最佳方式是什么

[英]Asp.net. what’s the best way that server side validation and client side validation work together nicely

我有一个Webform应用程序。

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

服务器端验证在Submit上进行。 它带回消息列表(字符串)以防止系统保存表单。

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

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

服务器端和客户端验证如何一起工作以便在每个文本框上显示味精? .net有没有不错的设计或体系结构? 确保所有客户端验证将以任何方式在服务器端重复。

谢谢

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM