C# 如何在asp.net mvc中处理业务逻辑验证

C# 如何在asp.net mvc中处理业务逻辑验证,c#,asp.net-mvc,validation,C#,Asp.net Mvc,Validation,想象一下以下场景: 实体类“类”,表示要给学生的类: public class Class { public Term Term { get; set; } public string ClassName { get; set; } public Subject Subject { get; set; } public Staff Tutor { get; set; } } 与其他类别(实体)有关联,如“主体”和“员工” 现在,如果我们有一个ViewModel,其中包括

想象一下以下场景:

实体类“类”,表示要给学生的类:

public class Class
{
   public Term Term { get; set; }
   public string ClassName { get; set; }
   public Subject Subject { get; set; }
   public Staff Tutor { get; set; }
}
与其他类别(实体)有关联,如“主体”和“员工”

现在,如果我们有一个ViewModel,其中包括一个可选主题列表和一个可选导师列表,那么这些列表在根据如下业务规则分配给视图模型之前会被过滤:

创建类的条件:

  • 允许选择的科目是当年创建的科目,并且为其创建的课程不超过2个
  • 允许选择的导师(员工)是指他们在当前“学期”教授的课程不超过3门的教师
  • 在视图方面,假设我们有一个Razor视图,它允许使用下拉列表进行选择。 考虑到登录的用户可以在发布前修改表单数据,他们可以发布数据,如果直接用于持久性,将导致违反上述条件

    这就引出了如何处理这一问题:

    • 我们是否通过获取符合上述条件的“受试者”和“导师”的筛选列表,并检查提交的表单是否包含与获取的筛选列表兼容的选择,在服务器上再次验证
    • 如果我们这样做,会不会有冗余,因为我们在呈现视图时已经完成了该操作
    • 缓存列表将涉及识别相关操作,如果用户在与视图交互时所做的操作会影响上述2项之外的条件,该怎么办
    • 规则引擎(WF???)是否适合此场景

    感谢反馈。

    永远不要信任从客户那里得到的数据,总是要重新验证。这个问题属于“。完全同意@artm,人们总是可以通过“动态”修改POST/get请求来更改数据(也是隐藏数据)。这就是为什么我要在服务器端重新验证。