Chase Florell
Chase Florell

Reputation: 47417

Manually Set ModelState.isValid from Controller

Is there a way for me to manually set the ModelState.isValid = False from the controller?

I have some code like this

    Dim _region As Domain.Region = RegionService.GetRegionByNameAndParentID(user.UserRegion, user.ParentRegionID)
    If ModelState.IsValid AndAlso Not _region Is Nothing Then
           ''# ...
    Else
           Return View(user)
    End If

But if _region is nothing, then I don't get any Validation Errors firing.

I thought about implementing a custom validator, but it would require hitting the database twice (once for validation and once to set the value).

Upvotes: 71

Views: 50209

Answers (2)

Robert Lenior
Robert Lenior

Reputation: 41

It is true that you cannot set the Modelstate directly, but sometimes it is useful to clear it and that is very well possible:

  ModelState.Clear();

Will reset the ModelState.

Upvotes: 3

richeym
richeym

Reputation: 4079

You can't set ModelState.IsValid directly, as it's a derived property that simply checks the models error collection. You can however add your own model errors, e.g:

ModelState.AddModelError("Region", "Region is mandatory");

ModelState.IsValid will then return false.

Upvotes: 126

Related Questions