2016-08-14 9 views
3

私のアプリケーションでは少数点を許可しようとしています(ASP.NET CoreはAzureで.Net 4.5.2 Full Frameworkで動作しています)。アプリケーションがカスタムDateTime書式でStartup.csでのみ使用デDE培養するように構成されている:数値形式がASP.NETコアで機能しない

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を使用している場合は、US-Windowsマシンで、私のコントローラにモデルエラーが発生します。ドイツの機械では正反対です(私は誰かに私にそれを確認するように頼んだ)。これは、ビューの一部です:

<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

ドキュメントごとに、ローカリゼーションミドルウェアを使用して現在のリクエストカルチャを設定する必要があります。 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で正常に検証されました。

関連する問題