C#ASP MVC-仅接受颜色十六进制值的字段

C#ASP MVC-仅接受颜色十六进制值的字段,c#,asp.net-mvc,colors,hex,C#,Asp.net Mvc,Colors,Hex,我正在制作一个管理员输入面板 管理员可以选择使用十六进制值(如#0000ff或#008000等)创建自定义颜色 现在,我在我的模型中使用这个: [Required(AllowEmptyStrings = false, ErrorMessage = "Please enter the color")] public string Color { get; set; } 如何进行验证,以便管理员只能在此处输入十六进制值 最重要的是,这真的有必要吗?我听说浏览器倾向于忽略错误的十六进制代码我想说的是

我正在制作一个管理员输入面板

管理员可以选择使用十六进制值(如#0000ff或#008000等)创建自定义颜色

现在,我在我的模型中使用这个:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter the color")]
public string Color { get; set; }
如何进行验证,以便管理员只能在此处输入十六进制值


最重要的是,这真的有必要吗?我听说浏览器倾向于忽略错误的十六进制代码

我想说的是,最好验证您的输入,然后根据浏览器的自定义行为

您可以使用以下属性或多或少地验证字段:

public class HexColorAttribute : ValidationAttribute
{
    private string _errorMessage;

    public HexColorAttribute(string errorMessage)
    {
        _errorMessage = errorMessage
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var colorHexStr = (string)value;
        var valid = Regex.IsMatch(colorHexStr, "#[0-9a-fA-F]{6}");
        if(valid)
        {
              return ValidationResult.Success;
        }
        else
        {
              return new ValidationResult(_errorMessage)
        }

    }
然后:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter the color")]
[HexColor("Color has to have format '#123456'")]
public string Color { get; set; }

它的工作原理与要求的属性类似。看看RequiredAttribute的特性。

我想说,最好验证您的输入,然后根据浏览器的自定义行为进行验证

您可以使用以下属性或多或少地验证字段:

public class HexColorAttribute : ValidationAttribute
{
    private string _errorMessage;

    public HexColorAttribute(string errorMessage)
    {
        _errorMessage = errorMessage
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var colorHexStr = (string)value;
        var valid = Regex.IsMatch(colorHexStr, "#[0-9a-fA-F]{6}");
        if(valid)
        {
              return ValidationResult.Success;
        }
        else
        {
              return new ValidationResult(_errorMessage)
        }

    }
然后:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter the color")]
[HexColor("Color has to have format '#123456'")]
public string Color { get; set; }

它的工作原理与要求的属性类似。看看RequiredAttribute的特性。

您编写了验证输入的javascript。没有一种方法可以做到这一点。试一试,如果出现问题,您的问题是添加一个JavaScript/HTML/CSS代码段,详细说明它为什么不工作。请注意,这需要浏览器支持,请注意,这只是客户端,与验证服务器端无关:我不明白为什么有人会认为这个问题“太广泛”。对于服务器端验证,您可以使用TryParse或RegEx。关于如何做到这一点,现有的答案如下:另一个客户端选项就是
。当然,这只适用于兼容HTML5的浏览器,因此您需要一个后备方案,但这绝对是现代浏览器的最佳方式。您可以编写javascript来验证输入。没有一种方法可以做到这一点。试一试,如果出现问题,您的问题是添加一个JavaScript/HTML/CSS代码段,详细说明它为什么不工作。请注意,这需要浏览器支持,请注意,这只是客户端,与验证服务器端无关:我不明白为什么有人会认为这个问题“太广泛”。对于服务器端验证,您可以使用TryParse或RegEx。关于如何做到这一点,现有的答案如下:另一个客户端选项就是
。当然,这只适用于兼容HTML5的浏览器,所以你需要一个后备方案,但这绝对是现代浏览器的最佳选择。“然后依赖浏览器的自定义行为。”这是我非常反对的一个说法,因为你不需要依赖自定义行为。可以使用非浏览器特定标准中定义的功能实现客户端验证:对于不支持该标准的浏览器,通常使用多边形填充使浏览器与标准内联。显然,您应该始终进行服务器端验证,但一种验证并不排除另一种验证的好处。“然后依赖浏览器的自定义行为。”这是我非常反对的一种说法,因为您不需要依赖自定义行为。可以使用非浏览器特定标准中定义的功能实现客户端验证:对于不支持该标准的浏览器,通常使用多边形填充使浏览器与标准内联。显然,您应该始终进行服务器端验证,但一种验证并不排除另一种验证的好处。