2017-08-25 30 views
1

我有一個本地化的核心ASP.NET Web應用程序:EN-US名稱和它-IT。ASP.NET核心定位小數場點和逗號

上的en-US小數點分隔符是點,在它-IT的小數點分隔符是逗號。

我有這樣的視圖模型

public class MyViewModel 
{ 
    public int Id {get; set; } 

    // Omitted 

    public decimal? Amount{get; set;} 

} 

對於小數場,當我上呈現創建/編輯頁面的en-US的HTML文本渲染

1000.00

如果我張貼表單,操作完成沒有錯誤。

到目前爲止這麼好。

當我上呈現創建/編輯頁面這-IT的HTML文本渲染

1000,00(注意逗號)

,如果我嘗試發佈形式,(客戶)驗證失敗

該字段金額必須是一個數字。

我看了一下IModelBinder但我明白是當表單發佈在服務器上,在我的情況下,我阻止客戶端驗證映射視圖模型。

更好的是使用時的點EN-美國和逗號時,它,但它僅使用點很好

+0

你需要編寫一個腳本來修改jQuery的驗證 –

+0

你能給我一些其他有關此信息? – Max

+0

我會看看,如果我可以很快找到一個鏈接 –

回答

2

挖掘深度的問題後,我發現了兩個解決方案:

Stephen Muecke這裏解釋如何將所需的jquery添加到輸入的validation for comma and dot

定製InputTagHelper其中改造逗號進入點的註釋。這裏我只添加了一個十進制類型,但顯然你可以添加float和double。

[HtmlTargetElement("input", Attributes = ForAttributeName, TagStructure = TagStructure.WithoutEndTag)] 
public class InvariantDecimalTagHelper : InputTagHelper 
{ 
    private const string ForAttributeName = "asp-for"; 

    private IHtmlGenerator _generator; 

    [HtmlAttributeName("asp-is-invariant")] 
    public bool IsInvariant { set; get; } 

    public InvariantDecimalTagHelper(IHtmlGenerator generator) : base(generator) 
    { 
     _generator = generator; 
    } 

    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     base.Process(context, output); 

     if (IsInvariant && output.TagName == "input" && For.Model != null && For.Model.GetType() == typeof(decimal)) 
     { 
      decimal value = (decimal)(For.Model); 
      var invariantValue = value.ToString(System.Globalization.CultureInfo.InvariantCulture); 
      output.Attributes.SetAttribute(new TagHelperAttribute("value", invariantValue));     
     } 
    } 
} 

對於使用這第二解決方案,您只需添加ASP-是不變的,以你的輸入,這樣

<input asp-for="AmountSw" class="form-control" asp-is-invariant="true" /> 
0

因爲ASP.NET嘗試值與當前文化轉換的轉換失敗(check this link )。 您需要在請求的當前線程中設置區域性。瀏覽器將發送它當前正在使用的語言,並支持Request.UserLanguage

您可以impliment自定義過濾器,一個HTTP模塊或使用MVC的事件結構,爲每個請求自動設置文化。 Check this link for a sample

+0

OP詢問**客戶端**端驗證,而不是服務器端 –

+0

是的,但即使小數輸入通過it-IT文化客戶端進行驗證,服務器也會返回錯誤解析發佈的字符串的錯誤文化。 – JoeJoe87577

+0

如果他們已經設置了服務器端文化,則不需要。再次閱讀這個問題 - 關於客戶端驗證的問題 –

相關問題