Когда я отправляю форму с пустой строкой «» для поля Guid
, я получаю сообщение об ошибке «Поле MyGuid обязательно». хотя я не задал атрибут «Обязательный».Привязать пустую строку к Guid.Empty или избежать ошибки состояния модели
//NOT Required
public Guid MyGuid { get; set; }
после модели связывания с Guid является 00000000-0000-0000-0000-000000000000
(потому что это значение по умолчанию), и это правильно. Но ModelState имеет указанную ошибку.
Как я могу избежать этой ошибки?
Дополнительная информация:
[Required(AllowEmptyStrings = true)]
не помогает
Я не хочу, чтобы сделать Nullable Guid (Guid?
), так как это привело бы к много дополнительного кода (проверка, если это имеет значение , отображение и так далее)
Update:
Хорошо, я понял, что изменения в 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);
}
}
Есть код, который проверяет, является ли Guid 'DefaultValue'? Имеет смысл проверять значение null/value, чем проверять 'DefaultValue'.И сохранение «DefaultValue» вместо нулевого значения просто путается - это эквивалент сохранения «пустой строки» вместо «». –
Да У меня есть службы и DAO, которые проверяют Guid.Empty. Гиды, которые я использую здесь, предназначены для получения данных или установки ссылок. Я никогда не сохраняю значение по умолчанию Guid – Fabiano