TryValidateModel和Model.IsValid有什么区别,哪个更好用?

时间:2013-12-24 11:16:45

标签: asp.net-mvc-4

我使用ASP.NET MVC 4.0并希望将jsonString对象传递给控制器​​, 我将其解码为Model个对象。我该如何验证该对象?

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

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

        }

我无法使用UpdateCategory(CategoriesEntryViewModel model),因为我有一个byte []属性,这样它就是null

1 个答案:

答案 0 :(得分:0)

参考SO

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

我还认为模型验证器已经在您手动调用它们时运行。您可以通过在循环之前查看ModelState.IsValid的值来检查此(对于无效模型)。如果它是假的,那么这意味着验证器是由模型绑定器运行的,这就是我认为的情况。