C# ASP.NET开发中的自定义验证器-干净与高效

C# ASP.NET开发中的自定义验证器-干净与高效,c#,asp.net,validation,C#,Asp.net,Validation,我在一个有大量文本框/下拉列表等需要填写的页面上工作。其中大部分将执行某种自定义验证。我应该注意的是,它并没有太大的尺寸,只是字符串或整数值 我总是听说(并且通常都同意)应该在客户端而不是服务器上执行尽可能多的验证,但在这种情况下,我不确定。这里的区别是,这个项目将被传递给一个IT人员,他了解计算机,但对编程仍然是新手——他将负责在将来对这些自定义验证的工作方式进行微小的更新和更改 我的想法从尽可能高效转变为效率稍低但可读性更强。我专门为我的所有验证创建了一个新类,该类将在整个网站中使用。不过,

我在一个有大量文本框/下拉列表等需要填写的页面上工作。其中大部分将执行某种自定义验证。我应该注意的是,它并没有太大的尺寸,只是字符串或整数值

我总是听说(并且通常都同意)应该在客户端而不是服务器上执行尽可能多的验证,但在这种情况下,我不确定。这里的区别是,这个项目将被传递给一个IT人员,他了解计算机,但对编程仍然是新手——他将负责在将来对这些自定义验证的工作方式进行微小的更新和更改

我的想法从尽可能高效转变为效率稍低但可读性更强。我专门为我的所有验证创建了一个新类,该类将在整个网站中使用。不过,通过在这个类中强制执行所有自定义验证代码,我消除了可能执行的任何客户端验证。我还应该注意到,每个需要自定义验证的页面通常需要至少执行一次服务器端验证,因此我永远无法使用客户端100%


考虑到网站(当前和将来)的相对较低的活动水平,你认为这是一个可以接受的解决方案吗?或者您是否总是希望在客户端上进行尽可能多的验证,以提高响应能力,即使这会让将来可能使用它的人感到更麻烦?

在我看来,您总是希望获得更好的用户体验。一般来说,如果您的代码没有为用户体验增加价值,那么在后端如何实现它并不重要。话虽如此,您应该始终尝试编写“可维护”的代码。如果“凌乱”代码是您目前能做的最好的代码,请添加说明原因的文档。

在我看来,您总是希望获得更好的用户体验。一般来说,如果您的代码没有为用户体验增加价值,那么在后端如何实现它并不重要。话虽如此,您应该始终尝试编写“可维护”的代码。如果“凌乱”代码是您目前能做的最好的代码,请添加说明原因的文档。

客户端验证的好处是用户不必等待页面回发

验证约束最好在服务器端声明。否则,有人可能会禁用浏览器上的JavaScript,并将损坏的数据发送到您的数据库


如果您希望获得客户端验证的速度,但为了维护而保持客户端干净,那么可以订阅每个表单输入的onblur事件,以执行AJAX调用并验证模型,然后在表单无效时约束表单不提交。这一切都可以被分解到一个外部的.js文件中,因此IT人员所要做的就是将其包含在内,然后从中生成HTML。

客户端验证的好处是用户不必等待页面发回

验证约束最好在服务器端声明。否则,有人可能会禁用浏览器上的JavaScript,并将损坏的数据发送到您的数据库


如果您希望获得客户端验证的速度,但为了维护而保持客户端干净,那么可以订阅每个表单输入的onblur事件,以执行AJAX调用并验证模型,然后在表单无效时约束表单不提交。这一切都可以被分解成一个外部的.js文件,所以IT人员所要做的就是将其包含在内,然后从中生成HTML。

使用现成的asp.net验证程序。。。它们将在客户端和服务器端进行验证。只是别忘了在服务器端检查:if(Page.IsValid)。在你按下提交按钮之后button@guy沙勒:uff。。。最好阅读以下问题:
执行某种自定义验证
这些肯定用于最基本的事情,如比较、必填字段等。这些不需要编写任何自定义代码。大多数人使用的是CustomValidator,我根据自己的计算结果返回真/假,而这些计算无法使用ASP.NET预构建工具完成。我认为,惊人的效率并不是主要问题,考虑到它自己生成的“多余”页面标记和脚本的数量。显然,回发会带来相当大的开销,但是,我认为问题更多的是与客户端的兼容性问题。@失望先生:这就是为什么我们只进行服务器端验证:)使用现成的asp.net验证程序。。。它们将在客户端和服务器端进行验证。只是别忘了在服务器端检查:if(Page.IsValid)。在你按下提交按钮之后button@guy沙勒:uff。。。最好阅读以下问题:
执行某种自定义验证
这些肯定用于最基本的事情,如比较、必填字段等。这些不需要编写任何自定义代码。大多数人使用的是CustomValidator,我根据自己的计算结果返回真/假,而这些计算无法使用ASP.NET预构建工具完成。我认为,惊人的效率并不是主要问题,考虑到它自己生成的“多余”页面标记和脚本的数量。显然,回发会带来相当大的开销,但是,我认为问题更多的是与客户机的兼容性问题。@Droop先生:这就是为什么我们只进行服务器端验证:)