Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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 Mvc_Validation - Fatal编程技术网

C# ASP.NET MVC模型验证最佳实践

C# ASP.NET MVC模型验证最佳实践,c#,asp.net-mvc,validation,C#,Asp.net Mvc,Validation,验证模型有两种主要方法 在每个操作中检查Model.IsValid 执行ActionFilterAttribute并检查 !actionContext.ModelState.IsValid每个请求都要全局注册 你用哪一种?它们的优点/缺点是什么?根据我的经验,检查模型。在每个动作中都有效是更好的方法 允许您更轻松地使用PRG(后重定向Get)模式 当用户提交无效的表单数据时,有时需要执行特定的操作 根据您的ViewModel,提交无效表单后可能需要重新填充字典 允许您显示操作成功/错误的特定消

验证模型有两种主要方法

  • 在每个操作中检查
    Model.IsValid
  • 执行
    ActionFilterAttribute
    并检查
    !actionContext.ModelState.IsValid
    每个请求都要全局注册

  • 你用哪一种?它们的优点/缺点是什么?

    根据我的经验,检查
    模型。在每个动作中都有效是更好的方法

    • 允许您更轻松地使用PRG(后重定向Get)模式
    • 当用户提交无效的表单数据时,有时需要执行特定的操作
    • 根据您的ViewModel,提交无效表单后可能需要重新填充字典
    • 允许您显示操作成功/错误的特定消息

    我建议只在最基本的解决方案中使用全局
    actionfilteratAttribute

    在我看来相当广泛。无论如何,如果你要做的只是如果(!Model.IsValid),那么过滤器就是正确的。这并不总是正确的,有时您需要更多(更具体)的逻辑,然后必须在每个方法中完成…我使用自定义验证,而不是Model.IsValid。每一个模型都通过了它的验证。