1
0
mirror of synced 2024-11-05 02:59:16 +00:00
Tapeti/Tapeti.DataAnnotations.Extensions/RequiredGuidAttribute.cs
2019-07-18 10:03:01 +02:00

35 lines
1.3 KiB
C#

using System;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
namespace Tapeti.DataAnnotations.Extensions
{
/// <summary>
/// Can be used on Guid fields which are supposed to be Required, as the Required attribute does
/// not work for Guids and making them Nullable is counter-intuitive.
/// </summary>
public class RequiredGuidAttribute : ValidationAttribute
{
private const string DefaultErrorMessage = "'{0}' does not contain a valid guid";
private const string InvalidTypeErrorMessage = "'{0}' is not of type Guid";
public RequiredGuidAttribute() : base(DefaultErrorMessage)
{
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null)
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
if (value.GetType() != typeof(Guid))
return new ValidationResult(string.Format(InvalidTypeErrorMessage, validationContext.DisplayName));
var guid = (Guid)value;
return guid == Guid.Empty
? new ValidationResult(FormatErrorMessage(validationContext.DisplayName))
: null;
}
}
}