I had the same problem and managed to find a solution. None of these solutions worked for me, so I decided to publish the solution for everyone who has this problem.
The problem was not that the model binding checked the field as invalid, but when using TryUpdateModel, the nullable property in the viewmodel was not NULL in the database object.
A clearer explanation:
TryUpdateModel(dbUser, "", new[]{ "DecimalProperty" }));
The "DecimalProperty" in the viewmodel is NULL, but in dbUser it cannot be null.
source share