Когда я отправляю форму с пустой строкой "" для поля Guid
, я получаю сообщение об ошибке "Поле MyGuid является обязательным".хотя я не установил атрибут «Требуется».
//NOT Required
public Guid MyGuid { get; set; }
после привязки модели Guid равен 00000000-0000-0000-0000-000000000000
(потому что это значение по умолчанию), и это правильно.Но ModelState имеет упомянутую ошибку.
Как мне избежать этой ошибки?
Дополнительная информация :
[Required(AllowEmptyStrings = true)]
не помогает
Я не хочу делать Guid обнуляемым (Guid?
), потому что это приведет к большому количеству дополнительного кода (проверка, имеет ли оно значение, отображение и т. Д.)
Обновление:
ОК, я понял, что изменение на Guid?
в моих моделях представлений не приведет к такому количеству изменений, как я ожидал (некоторые вызовы MyGuid.GetValueOrDefault()
или некоторые проверки для MyGuid.HasValue
и вызывает MyGuid.Value
).
Тем не менее, причина, по которой добавляется ошибка модели, если в запросе на отправку нет действительного Guid, заключается в том, что DefaultModelBinder
пытается связать null
Guid
.Решение было бы переопределить DefaultModelBinder
.И никакие ошибки не будут добавлены в состояние модели
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);
}
}