2016-08-14 33 views
3

我嘗試在我的應用程序中使用小數(ASP.NET Core在Azure中的.Net 4.5.2 Full Framework上運行)。該應用程序被配置爲只使用DE-DE文化Startup.cs用自定義DateTime格式:數字格式在ASP.NET Core中不起作用

var dtf = new DateTimeFormatInfo 
     { 
      ShortDatePattern = "dd.MM.yyyy", 
      LongDatePattern = "dd.MM.yyyy HH:mm", 
      ShortTimePattern = "HH:mm", 
      LongTimePattern = "HH:mm" 
     }; 

     services.Configure<RequestLocalizationOptions>(
      options => 
      { 
       var supportedCultures = new List<CultureInfo> 
        { 
         //new CultureInfo("en-US") { DateTimeFormat = dtf }, 
         //new CultureInfo("en") { DateTimeFormat = dtf }, 
         new CultureInfo("de-DE") { DateTimeFormat = dtf }, 
         new CultureInfo("de") { DateTimeFormat = dtf } 
         //new CultureInfo("en-US"), 
         //new CultureInfo("en"), 
         //new CultureInfo("de-DE"), 
         //new CultureInfo("de") 
        }; 

       options.DefaultRequestCulture = new RequestCulture(culture: "de-DE", uiCulture: "de-DE"); 
       options.SupportedCultures = supportedCultures; 
       options.SupportedUICultures = supportedCultures; 
      }); 

我的模型看起來像這樣,我還試圖用{0:####}這也沒有工作,以及更改類型爲「小數?」

[Display(Name = "ContainerWeight", ResourceType = typeof(SharedResource))] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:N3}")] 
    public float? Weight { get; set; } 

如果我提交表單,如果我使用例如JavaScript驗證,則會出現錯誤。 111,222在我的機器上,這是一個en-US Windows機器,如果我使用111.222,我的控制器中會出現模型錯誤。在德國的機器上,它看起來正好相反(我問別人爲我檢查)。這是視圖的一部分:

<div class="form-group col-sm-12 col-md-6"> 
         <label asp-for="Weight" class="col-md-3 control-label"></label> 
         <div class="col-md-9"> 
          <input asp-for="Weight" class="form-control" /> 
          <span asp-validation-for="Weight" class="text-danger" /> 
         </div> 
        </div> 

我有類似麻煩的DateTime格式工作,但想通了,這個人似乎對我來說很難:-)

任何想法表示讚賞。

回答

2

根據文檔,您必須使用本地化中間件來設置當前的請求文化。您必須在Configure方法中執行此操作,而不是在ConfigureService方法中執行。

我在Configure方法中做了以下事情。

var dtf = new DateTimeFormatInfo 
      { 
       ShortDatePattern = "dd.MM.yyyy", 
       LongDatePattern = "dd.MM.yyyy HH:mm", 
       ShortTimePattern = "HH:mm", 
       LongTimePattern = "HH:mm" 
      }; 
      var supportedCultures = new List<CultureInfo> 
         { 
         //new CultureInfo("en-US") { DateTimeFormat = dtf }, 
         //new CultureInfo("en") { DateTimeFormat = dtf }, 
         new CultureInfo("de-DE") { DateTimeFormat = dtf }, 
         new CultureInfo("de") { DateTimeFormat = dtf } 
         //new CultureInfo("en-US"), 
         //new CultureInfo("en"), 
         //new CultureInfo("de-DE"), 
         //new CultureInfo("de") 
        }; 

      app.UseRequestLocalization(new RequestLocalizationOptions 
      { 
       DefaultRequestCulture = new RequestCulture("de-DE"), 
       // Formatting numbers, dates, etc. 
       SupportedCultures = supportedCultures, 
       // UI strings that we have localized. 
       SupportedUICultures = supportedCultures 
      }); 

之後,我創建了示例模型。

public class TestModel 
    { 
     [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:N3}")] 
     public float? Weight { get; set; } 
    } 

並從UI傳遞值111,112,並在UI中以及在控制器級別成功驗證。

相關問題