2013-10-11 52 views
0

我正在通過Asp.net MVC4.0中的應用程序工作,其中我是Model CountryInformation ,它具有以下屬性。當模型是我輸入後確認爲緯度場錯誤的值Asp.Net MVC 4 Regular Express屬性不顯示我的消息

[Required(ErrorMessage = "This field is required.")] 
    [Display(Name = "Country Name")] 
    public string CountryName { get; set; } 

    [Required(ErrorMessage = "This field is required.")] 
    [RegularExpression(@"^[+-]?[0-9]{1,9}(?:\.[0-9]{1,6})?$",ErrorMessage = "Input decimal numbers.")] 
    public float Latitude { get; set; } 
    [Required(ErrorMessage = "This field is required.")] 
    //[RegularExpression(@"^[+-]?[0-9]{1,9}(?:\.[0-9]{1,6})?$", ErrorMessage = "Input decimal numbers.")] 
    public float Longitude { get; set; } 
    [Required(ErrorMessage = "This field is required.")] 
    //[RegularExpression(@"^[+-]?[0-9]{1,9}(?:\.[0-9]{1,6})?$", ErrorMessage = "Input decimal numbers.")] 
    [Display(Name = "GMT Offset")] 
    public float GMTOffSet { get; set; } 

    public string Currency { get; set; } 

一切工作正常,即ABC當然不是一個小數,然後它不顯示我的錯誤消息,但「 值‘ABC’是對於谷歌縱橫無效「。每頁在頁面源中我看到的值爲

<input id="Latitude" class="input-validation-error text-box single-line" type="text" value="abc" name="Latitude" data-val-required="This field is required." data-val-regex-pattern="^[+-]?[0-9]{1,9}(?:\.[0-9]{1,6})?$" data-val-regex="Input decimal numbers." data-val-number="The field Latitude must be a number." data-val="true"> 

值'abc'對於緯度無效。 請描述爲什麼我看不到我的信息

回答

2

想象一下,你在一個房間裏,確保從牆上的洞插入的塊是圓的是你的工作。爲了達到這個數值,這個洞被製成圓形。當你得到一個方塊時,你的工作是發出警報,這是3個鐘聲。

現在,有人來了,並試圖通過圓孔放置一個方塊。哎呀......它不適合。所以你永遠不會得到方塊,不會發出警報。相反,這個人聽起來有2個鈴的警報,因爲他無法適應圓孔中的方塊。

在這個比較中,正則表達式就是你。您被告知驗證不可能發生的事情,因爲abc不能以十進制值存儲。因此,緯度或經度的值永遠不能是有效的小數值(特別是因爲您沒有使用可爲空的小數,所以它的默認值始終爲0.0並且不能爲空)。

與此同時,MVC框架注意到你試圖將一個字符串填充到一個十進制值,它不能這麼做,所以它會拋出一個通用錯誤。

換句話說,使用十進制自動驗證它是一個有效的十進制數。如果使用可爲空的小數,那麼它會驗證它是十進制數還是null。然後您可以使用必需的驗證器來確保它不爲空並傳遞您自己的消息。

如果要使用正則表達式驗證程序,則必須製作Lattitude和Longitude字符串,然後在過程中稍後將它們轉換爲小數點。

0

試試這個:

*^[0-9]([.,][0-9]{1,3})?$* 

它將接受

XY和X,Y型數據,如果你想我以前不與

*^[0-9]([.][0-9]{1,3})?$* 

替換表達的問題是與?:你在表達式中檢查但不捕獲。

+0

你的建議正則表達式不需要,因爲我有這個 緯度= 15或15.15或+15或-20.5 同樣適用於經度和GMT偏移量。 如果它的正則表達式導致另一個消息被顯示,並且友好地向我建議一個正則表達式來滿足我的需要。 謝謝 –

+0

所以你的問題是+和 - 小數前的符號 沒問題只是添加[+ - ]?在正則表達式之前 現在新的表達式是 *^[+ - ]?[0-9]([。] [0-9] {1,3})?$ * – user2615807

相關問題