Мне нужно передать значение Guid в пользовательский атрибут ValidationAttribute, но я получаю
Параметр конструктора атрибута 'siteUId' имеет тип Guid, который не является допустимым параметром атрибута type
Если я изменю Guid на object , я получу
Аргументом атрибута должно быть постоянное выражение, выражение typeof или выражение массива тип параметра атрибута
Валидатор :
public sealed class ViewNameAttribute : ValidationAttribute
{
private readonly Guid _siteUId;
/// <summary>
/// Checks if a view with the same name exists
/// </summary>
/// <param name="siteUId">UId of site which to add view</param>
public ViewNameAttribute(Guid siteUId)
{
_siteUId = siteUId;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
ISitesRepo repo = validationContext.GetRequiredService<ISitesRepo>();
ISite site = repo.GetSite(this.SiteUId).Result;
IStringLocalizer<ValidationResources> localizer = validationContext.GetRequiredService<IStringLocalizer<ValidationResources>>();
string name = value.ToString();
var tmp = site.Views.SingleOrDefault(vw => vw.Active && vw.Name.ToUpper() == name.ToUpper());
if (!tmp.IsNull())
{
return new ValidationResult(localizer["SitesViewNameExists"].Value);
}
return ValidationResult.Success;
}
private Guid SiteUId => _siteUId;
}
Модель :
public interface ICreateViewModel
{
string GroupName { get; set; }
string Name { get; set; }
}
public class CreateViewModel : ICreateViewModel
{
[FromRoute(Name = "site")]
public static Guid SiteUId { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessageResourceType = typeof(IStringLocalizer<ValidationResources>), ErrorMessageResourceName = "SitesNewViewNameMissing")]
[MinLength(6, ErrorMessageResourceType = typeof(IStringLocalizer<ValidationResources>), ErrorMessageResourceName = "SitesNewViewNameToShort")]
[ViewName(SiteUId)]
[FromForm(Name = "name")]
public string Name { get; set; }
}