2016-08-14 4 views
3

내 응용 프로그램에서 소수점 허용을 시도합니다. (.NET Core에서 .Net 4.5.2 전체 프레임 워크를 실행 중입니다.) 응용 프로그램은 사용자 지정 날짜 시간 형식 Startup.cs 만 사용 드 드 문화로 구성되어숫자 형식이 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; } 

양식을 제출하면 예를 들어 자바 스크립트 유효성 검사에 오류가 발생합니다. 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> 

이 사람은 어떤 생각이 감사

:-) 나를 위해 열심히 보인다 :이보기의 일부입니다.

답변

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에 확인.

관련 문제