gpt4 book ai didi

c# - 数字格式在 ASP.NET Core 中不起作用

转载 作者:行者123 更新时间:2023-11-30 15:20:55 25 4
gpt4 key购买 nike

我尝试在我的应用程序中允许使用小数(在 Azure 中的 .Net 4.5.2 Full Framework 上运行的 ASP.NET Core)。该应用程序配置为仅在 Startup.cs 中使用自定义 DateTime 格式的 de-DE 文化:

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:#.###} 也没有用,并且将类型更改为 decimal?.

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

如果我提交我的表单,如果我使用例如111,222 在我的 en-US Windows 机器上,如果我使用 111.222,我的 Controller 会出现模型错误。在德国机器上,它看起来恰恰相反(我请别人帮我检查一下)。这是 View 的一部分:

<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 格式工作时遇到了类似的麻烦,但我想通了,这对我来说似乎很难。

最佳答案

根据文档,您必须使用本地化中间件来设置当前请求文化。您必须在 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 和 Controller 级别也成功验证。

关于c# - 数字格式在 ASP.NET Core 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38945076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com