【问题标题】:C# ASP MVC - A field that only accepts hexadecimal values for colorsC# ASP MVC - 仅接受颜色的十六进制值的字段
【发布时间】:2018-01-11 11:54:45
【问题描述】:

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

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

现在,我在我的模型中使用它:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter the color")]
public string Color { get; set; }

我如何验证以便管理员只能在此处输入十六进制值?

最重要的是,这真的有必要吗?听说浏览器倾向于忽略错误的十六进制代码Why does HTML think “chucknorris” is a color?

【问题讨论】:

  • 您编写验证输入的 javascript。没有一种方法可以做到这一点。试试看,如果出现问题,edit 你的问题是添加一个 JavaScript/HTML/CSS sn-p 并详细说明它为什么不工作。
  • 看到这个但注意它需要浏览器支持,并注意这只是客户端,它与验证服务器端没有任何关系:stackoverflow.com/questions/17414348/…
  • 我不明白为什么有人会将这个问题投票为“太宽泛”。它与验证问题一样具体。
  • 对于服务器端验证,您可以执行 TryParse 或使用 RegEx。关于如何做到这一点,有类似这样的现有答案:stackoverflow.com/a/25933687/1260204
  • 另一个客户端选项只是<input type="color">。当然,这只适用于兼容 HTML5 的浏览器,因此您需要一个后备方案,但这绝对是现代浏览器的最佳选择。

标签: c# asp.net-mvc colors hex


【解决方案1】:

我会说最好先验证您的输入,然后再传递浏览器的自定义行为。

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

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的source code

【讨论】:

  • "然后中继浏览器的自定义行为。"这是我有严重问题的一个陈述,因为您不需要依赖自定义行为。您可以使用非浏览器特定标准中定义的功能实现客户端验证:w3.org/TR/html5/forms.html#the-pattern-attribute 对于不支持该标准的浏览器,通常使用 polyfill 使浏览器符合标准。显然,您应该始终进行服务器端验证,但不排除另一个的好处。
猜你喜欢
  • 2014-07-03
  • 1970-01-01
  • 2020-10-15
  • 2012-03-24
  • 1970-01-01
  • 2012-08-08
  • 2019-06-16
  • 2021-03-08
  • 2016-09-25
相关资源
最近更新 更多