Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC中处理复杂的验证场景_C#_Asp.net_Asp.net Mvc_Linq To Sql_Validation - Fatal编程技术网

C# 在ASP.NET MVC中处理复杂的验证场景

C# 在ASP.NET MVC中处理复杂的验证场景,c#,asp.net,asp.net-mvc,linq-to-sql,validation,C#,Asp.net,Asp.net Mvc,Linq To Sql,Validation,我一直在为我的User类开发一个GetRuleViolations() 当不同的操作需要不同的业务规则时会发生什么情况? 我的User表有以下列:Id、UserRoleId、Username和Password。可以执行涉及用户的多个操作(创建新用户、编辑用户、设置/重置密码和登录),并且每个操作的业务规则并不总是相同的 例如,当用户登录时,他们需要输入密码,但当管理员创建新用户时,输入密码甚至不是一个选项。在设置/重置密码的情况下,需要输入两次密码,并且两个值必须完全匹配。处理这种复杂性的最佳方

我一直在为我的
User
类开发一个
GetRuleViolations()

当不同的操作需要不同的业务规则时会发生什么情况?

我的
User
表有以下列:
Id
UserRoleId
Username
Password
。可以执行涉及用户的多个操作(创建新用户、编辑用户、设置/重置密码和登录),并且每个操作的业务规则并不总是相同的

例如,当用户登录时,他们需要输入密码,但当管理员创建新用户时,输入密码甚至不是一个选项。在设置/重置密码的情况下,需要输入两次密码,并且两个值必须完全匹配。处理这种复杂性的最佳方法是什么?是否有某种设计模式允许为正确的环境选择正确的
GetRulesViolations()
方法?

至于#1,业务规则将不存在于数据库中,它们将存在于应用程序中,无论是在域层、单独的业务层中,等等。。。或者就在你的控制器里,取决于你的方法

您将向正在创建用户的登录管理员显示不同的屏幕或视图,而不是向正在创建帐户的未经验证的用户显示,对吗?该视图中的HTTP-POST将对应于一个不同的操作,该操作要么直接处理逻辑,要么委托给相应的对象。一种方法是检查提供的密码,或者为用户创建一个记录,或者将用户重定向到某种失败页面(“密码不匹配”或者“用户名已被使用”)。另一种方法将在数据库中创建一个新用户,不会提出任何问题

不同的视图发布到不同的操作,对应不同的方法,每个方法处理一个特定的作业/场景。

我发现处理验证的“服务层”非常有意义

我发现本教程非常有用:


此外,MVC2.0似乎正在进行一些很好的验证增强(请参阅)。使用
UserService
UserValidator
应该允许2.0功能折叠起来,而不必太过显著地更改类设计。

感谢您的回答,但我认为我的第一个问题可能有点不清楚。我已经有了不同的视图(例如,用户/登录、用户/创建、用户/编辑、用户/编辑密码等)。我需要的是一个验证系统,它为正确的操作/视图选择正确的
GetRuleViolations()
方法。我正在寻找关于如何设计我的类的建议,等等。