Asp.net mvc 4 TryValidateModel和Model.IsValid之间的区别是什么,使用哪个更好?

Asp.net mvc 4 TryValidateModel和Model.IsValid之间的区别是什么,使用哪个更好?,asp.net-mvc-4,Asp.net Mvc 4,我使用ASP.NET MVC 4.0,希望将jsonString对象传递给控制器, 我把它解码成一个模型对象。如何验证该对象 public JsonResult UpdateCategory(string jsonCategory) { var categoryWitSubcategories = System.Web.Helpers.Json.Decode<CategoriesEntryViewModel>(jsonCateg

我使用ASP.NET MVC 4.0,希望将
jsonString
对象传递给控制器, 我把它解码成一个
模型
对象。如何验证该对象

public JsonResult UpdateCategory(string jsonCategory)
    {  
        var categoryWitSubcategories =
              System.Web.Helpers.Json.Decode<CategoriesEntryViewModel>(jsonCategory);

        // If model is invalid
        if (!TryValidateModel(categoryWitSubcategories))
           // This works...

        }
公共JsonResult更新类别(字符串jsonCategory) { var类别及其子类别= System.Web.Helpers.Json.Decode(jsonCategory); //如果模型无效 if(!TryValidateModel(类别及其子类别)) //这很有效。。。 } 我不能使用
UpdateCategory(CategoriesEntryViewModel模型)
,因为我有一个byte[]属性,这样它将是
null
引用

查看代码,在我看来,
TryValidateModel
将验证所提供对象给定类型的所有模型,而不仅仅是该特定对象本身。此外,它还返回
ModelState.IsValid
属性的当前值,因此一旦存在无效的模型,
TryValidateModel
的所有调用都将返回false。如果您想做类似的事情,我认为您需要自己在特定的模型实例上获取并运行每个模型实例的验证器

我还认为,当您手动调用模型验证器时,它们已经运行了。您可以通过在循环之前查看
ModelState.IsValid
的值来检查这一点(对于无效模型)。如果为false,则表示验证器是由model binder运行的,我认为这就是发生的情况。

查看