2013-10-28 102 views
4

我正在努力驗證使用全球化的小數字段。MVC Jquery全球化 - 驗證小數點

我需要我的價值是在法國的格式(與昏迷小數分隔符和千位分隔符)。

編輯:更新以下This great solution

所以,這裏是我的模型:

public class CompanyTaxHistoryModel 
{ 
    [Required] 
    public DateTime DateFrom { get; set; } 

    [Required] 
    public DateTime DateTo { get; set; } 

    [Required] 
    [Range(0, 100, ErrorMessage = "The percentage must be between 0 and 100")] 
    [DisplayFormat(DataFormatString = "{0:N} %")] 
    [Display(Name = "Company Tax")] 
    public decimal CompanyTaxPercent { get; set; } 

} 

這裏是我的web.config:

<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" culture="auto" uiCulture="auto" />

我添加了一個「localizationHelper」如下:

namespace xxxx.Helpers 
{ 
    public static class LocalizationHelpers 
    { 
     public static IHtmlString MetaAcceptLanguage<t>(this HtmlHelper<t> html) 
     { 
      var acceptLanguage = HttpUtility.HtmlAttributeEncode(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString()); 
      return new HtmlString(String.Format("<meta name=\"accept-language\" content=\" {0}\">",acceptLanguage)); 

     } 
    } 
} 

至極我在_Layout.cshtml使用:

@using xxxx.Helpers 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8" /> 
    @Html.MetaAcceptLanguage() 

我已經加入了Globalize.js +所需要的文化到我的項目,並添加以下到我的腳本:

$(document).ready(function() { 
    var data = $("meta[name='accept-language']").attr("content") 
    Globalize.culture(data); 
}); 

$.validator.methods.date = function (value, element) { 
    return Globalize.parseDate(value); 
}; 

$.validator.methods.range = function (value, element, param) { 
    return this.optional(element) || (Globalize.parseFloat(value) >= param[0] && Globalize.parseFloat(value) <= param[1]); 
} 

$.validator.methods.number = function (value, element) { 
    return !isNaN(Globalize.parseFloat(value)); 
} 

一切似乎工作得很好,但我有一個小數值的問題作爲「。」。任何鍵盤的按鈕都應該顯示撥出的值(根據當地文化,可以是「。」或「,」)。

例如,我的瀏覽器設置爲fr-FR,如果僅使用數字鍵盤輸入「12.5」,則會得到「12.5」,因此會出現驗證錯誤。

在這種情況下,「。」數字鍵盤的按鈕應被理解爲昏迷。

任何想法,我錯過了什麼?

+0

對於模型綁定十進制值,這個鏈接會幫助你。 http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx –

回答

0

所以,

的全球化問題,解決辦法是here,並反映在我的問題的編輯(迄今爲止似乎完美地工作)。

爲這裏的點/逗號的問題是,我所做的

function validateFrNumber(e) { 

     theCulture = Globalize.cultureSelector; 
     foundFR = theCulture.indexOf("FR") 
     foundfr = theCulture.indexOf("fr") 

     if (foundFR != '-1' || foundfr != '-1') { 
      theValeur = $(e).find("input").val(); 
      foundDot = theValeur.indexOf("."); 

      if (foundDot > -1) { 
       $(e).find("input").attr('value', theValeur.replace(".", ",")); 
      } 
     } 

} 

,然後調用此輸入的onkeyup:

<div class="input" onkeyup="validateFrNumber(this)">@Html.EditorFor(model => model.MydecimalValue)</div>