When I post a form with an empty string "" for a Guid
field I get the error "The MyGuid field is required." although I haven't set the "Required" attribute.
//NOT Required
public Guid MyGuid { get; set; }
after model binding the Guid is 00000000-0000-0000-0000-000000000000
(because it's the default value) and that's correct. But the ModelState has the mentioned error.
How can I avoid this error?
Additional Info:
[Required(AllowEmptyStrings = true)]
does not help
I don't want to make the Guid nullable (Guid?
) because this would lead to a lot additional code (checking if it has a value, mapping and so on)
Update:
OK, I figured out that a change to Guid?
in my view models doesn't result in that many changes than I expected (some calls to MyGuid.GetValueOrDefault()
or some checks for MyGuid.HasValue
and calls to MyGuid.Value
).
However, the reason that a model error is added if no valid Guid is provided with the post request, is that the DefaultModelBinder
tries to bind null
to Guid
. The solution would be to override the DefaultModelBinder
. And no errors will be added to the model state
public class MyModelBinder : DefaultModelBinder
{
protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
{
if (propertyDescriptor.PropertyType == typeof(Guid) && value == null)
{
value = Guid.Empty;
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
}