【问题标题】:How to force serverside validation instead of only clientside?如何强制服务器端验证而不仅仅是客户端?
【发布时间】:2016-04-07 09:43:46
【问题描述】:

我有一个 Webforms 应用程序,不希望用户输入无效值。

目前我正在使用这样的验证器控件来解决这个问题:

<asp:TextBox runat="server" ID="tbInsert"></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ControlToValidate="tbInsert"  ID="rqtbInsert"
     ErrorMessage="Required"> 
</asp:RequiredFieldValidator> 

但这仅在客户端验证值(用户可以避免)

我必须为每个控件添加服务器端验证吗?应该怎么做?

if (!string.IsNullOrEmpty(tbInsert.Text))
{
   //do sth.
}

【问题讨论】:

    标签: c# asp.net validation


    【解决方案1】:

    验证器不仅在客户端进行检查。所有具有CausesValidation=true 的控件都将在服务器端触发Page.Validate(),这将导致所有相关的(如果指定了ValidationGroups,否则所有)验证器进行验证。

    因此客户端检查是可选的,可以通过EnableClientScript 启用/禁用,而服务器端检查始终进行,也可以使用Page.Validate 方法以编程方式触发。

    【讨论】:

      【解决方案2】:

      在服务器端,使用 Page.IsValid 属性来检查是否所有的验证控件都通过了,它返回一个值来指示页面验证是否成功。来自MSDN Page.IsValid

       private void ValidateBtn_Click(Object Sender, EventArgs E)
      {
          Page.Validate();
          if (Page.IsValid == true)
              lblOutput.Text = "Page is Valid!";
          else
              lblOutput.Text = "Some required fields are empty.";
      }
      

      【讨论】:

        【解决方案3】:

        而不是为每个控件添加验证。添加静态验证助手类并将模型的所有验证方法写入同一个类。 仅从服务器端的接收方法进行验证的所有每种方法。

        通过这种方式,您将获得依赖关系并实现所需的行为而不会过度填充方法(只需在方法入口处进行一次调用)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-30
          • 1970-01-01
          • 2010-11-20
          • 2012-01-23
          • 1970-01-01
          相关资源
          最近更新 更多