2017-09-04 9 views
1

내 웹 사이트에는 10 진수를 사용하는 숫자 입력 양식이 있습니다. 이것은 뷰 모델의 컨트롤러로 다시 전송됩니다. 유효성 검사를 통과하면, 뷰 모델은 다음과 같이 엔티티로 변환된다 : 재미가 시작되는 그래서 여기aspnet 코어/ef 핵심 엔터티의 10 진 문제

quotation.WidthMeters = model.WidthMeters. 

입니다.

내 웹 사이트는 네덜란드 문화권에 있습니다. 십진수 분리자는 쉼표를 사용합니다. 따라서 사용자는 2,40을 입력합니다. 이것은 돌려 보내진다. 뷰 모델의 데이터에 미국의 2,40을 나타내는 2.40이 포함 된 것을 볼 수 있습니다. 이제이 값이 엔티티에 할당되면 갑자기 240으로 변경됩니다. 따라서 quotation.WidthMeters은 240이지만 할당하는 속성 (model.WithMeters)은 2.40입니다.

왜?

(추가 아마 중요한 : 나는 InvariantCulture 내 컨트롤러 달렸 컨트롤러의 생성자에 다음 두 줄을 추가하여 :

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; 
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; 

기업은 같은 프로젝트에)

업데이트는

나는 내 startup.cs에 다음을 추가, 그것은 작동 :

app.UseRequestLocalization(new RequestLocalizationOptions 
     { 
      DefaultRequestCulture = new RequestCulture("en-US"), 
      SupportedCultures = new [] {new CultureInfo("en-US") }, 
      SupportedUICultures = new [] { new CultureInfo("en-US") } 
     }); 

내가 문화를 nl-NL으로 바꿀 때 작동하지 않지만 네덜란드 문화를 사용하는 것이 더 좋습니다. 날짜도 수정되기 때문입니다. 내 양식에

갱신이

내가 크롬과 파이어 폭스에서 적어도 항상 소수점으로 다시 번호를 보내 <input type="number" /> 필드를 사용했다. 텍스트 필드로 다시 전환하여 문화를 nl-NL로 변경했습니다. 이제 소수점 쉼표로 숫자를 입력 할 수 있으며 서버에 의해 올바르게 처리됩니다.

그래서 TRWTF는 왜 브라우저가 숫자 입력란에 쉼표를 표시하지만 점으로 다시 전송합니까?

+1

따라서 소수점을 다른 소수점으로 지정하면 값이 2.40에서 240으로 변경됩니다. – user743414

+0

@ user743414 내 편집보기 – jao

+0

https://www.nuget.org/packages/Microsoft.AspNetCore.Localization/을 설치 했습니까? – haim770

답변

0

소리가 맞지 않습니다. 과제에서 과제 유형과 과제의 가치 (예 : 디버거)를 다시 확인해야합니다. .NET 런타임에서 10 진수를 다른 10 진수로 지정하면 값이 변경된다는 것은 의미가 없습니다.

+0

이것은 .NET 변경 유형과는 아무런 관련이 없습니다. 국제화에 관한 것입니다. 브라우저는 서버와 다른 * 문화를 사용합니다. 누군가가 잘못된 문화를 하드 코딩하거나 잘못된 문화를 사용하지 않는 한 ASP.NET은 이미이를 처리합니다. 컴퓨터 로케일이 지역화 된 문자열을 입력하려고하는 'en-US'로 설정된 개발자와 같습니다. –