2017-08-03 47 views
0

我在做一個管理員輸入面板。C#ASP MVC - 一個字段,只接受顏色的十六進制值

管理員會有一個選項,使用十六進制值,以創建一個自定義顏色,如#0000FF或#008000等

眼下,I'm在我的模型中使用此:

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

如何驗證管理員只能在此處放置十六進制值?

而最重要的是,這真的有必要嗎?我聽說瀏覽器傾向於忽略假十六進制代碼Why does HTML think 「chucknorris」 is a color?

+2

你寫了驗證輸入的javascript。沒有辦法做到這一點。嘗試一下,如果出現問題,請編輯您的問題以添加JavaScript/HTML/CSS代碼片段,其中包含有關爲什麼它不起作用的詳細信息。 – Will

+1

看到這一點,但注意它需要瀏覽器支持,並且注意這只是客戶端,它與驗證服務器端沒有任何關係:https://stackoverflow.com/questions/17414348/html-5-hex-string -for-pattern-attribute – AaronLS

+0

您可以使用現有的基於JavaScript的控件和瀏覽器端驗證。 [有足夠的](https://www.google.com/search?q=javascript+color+picker+control)。 – Igor

回答

4

我會說,它是驗證您的輸入,然後繼承瀏覽器的自定義行爲。

您可以驗證你的領域或多或少具有以下屬性:

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; } 

據工作同樣要求attribiute。看看RequiredAttribute的source code

+1

「然後轉發瀏覽器的自定義行爲。」這是我遇到的嚴重問題之一,因爲您不需要依賴自定義行爲。您可以使用在非瀏覽器特定標準中定義的功能來實現客戶端驗證:https://www.w3.org/TR/html5/forms.html#the-pattern-attribute 對於不支持該標準的瀏覽器,填充使瀏覽器與標準內聯。顯然,你應該總是有服務器端驗證,但不排除另一方的好處。 – AaronLS