【问题标题】:Asp.net. what’s the best way that server side validation and client side validation work together nicelyASP.NET。服务器端验证和客户端验证很好地协同工作的最佳方式是什么
【发布时间】:2012-05-04 23:01:59
【问题描述】:

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

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

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

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

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

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

谢谢

【问题讨论】:

    标签: javascript asp.net validation


    【解决方案1】:

    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");
      }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-10
        • 2017-05-03
        • 2023-04-08
        • 2012-01-23
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多