내 웹 사이트에는 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는 왜 브라우저가 숫자 입력란에 쉼표를 표시하지만 점으로 다시 전송합니까?
따라서 소수점을 다른 소수점으로 지정하면 값이 2.40에서 240으로 변경됩니다. – user743414
@ user743414 내 편집보기 – jao
https://www.nuget.org/packages/Microsoft.AspNetCore.Localization/을 설치 했습니까? – haim770