gpt4 book ai didi

c# -ModelState.IsValid 仅在资源语言更改时返回 false?

转载 作者:行者123 更新时间:2023-11-30 16:44:57 28 4
gpt4 key购买 nike

我的 Razor View 中有一个字段如下

 @Html.TextBoxFor(model => model.Duration, new { @class = "form-control txtSite input-large rounded-custom", name = "Duration", @type = "number", min = "0", id = "durationId", required = "true", Tabindex = "1", value = "0" })
@Html.ValidationMessageFor(model => model.Duration, "", new { style = "color: red" })

我在 MVC 中使用了实体模型结构。字段持续时间在数据库表“Activity”(我在 Razor 上使用的相同模型)中定义为 Float。但是实体元数据将其显示为 Double,如下所示。

  public Nullable<double> Duration { get; set; }

我使用部分类作为 Activity.cs 进行所需的验证,如下所示

 [MetadataTypeAttribute(typeof(Activity.Metadata))]
public partial class Activity
{
internal sealed class Metadata
{
[Required(ErrorMessageResourceType = typeof(Resources.Common), ErrorMessageResourceName = "PleaseEnterDuration")]
public Nullable<double> Duration { get; set; }
}
}

在 Controller 上我的代码是这样的

[HttpPost]
public ActionResult AddActivity(Activity model)
{
if (ModelState.IsValid)
{
//Some Code
}
}

奇怪的是,当我显示标签的资源语言是英语时,我的代码适用于浮点值,而当我将其更改为另一种语言(法语)时它不起作用。这里 ModelState.IsValid 返回 false。我收到错误信息

"The value 3.5(any float value) is invalid for Duration." 

如何为另一种资源语言修复它?。任何帮助将不胜感激

最佳答案

您收到该错误是因为您网站的文化设置为不使用点 . 作为小数点分隔符的语言(法语)。但是,Duration 的条目中有一个点,因此您的模型状态评估为无效。

换句话说,您的网站(服务器端)是法语文化,但浏览器或您使用的任何客户端都不是法语。


修复

您需要同步客户端和服务器的语言在每次请求时:确保设置文化的代码针对每个请求执行,而不仅仅是在应用程序启动时执行。用户可以在请求之间切换语言。将 CurrentCulture 设置为适当的语言将使用该语言的数字格式、日期时间格式等。

此外,建议但不是必须解决您的问题,您还应该设置 CurrentUICulture,它将从您的语言资源文件中获取标签、消息等(如果您有任何资源文件)。

按照@orhun.begendi 上面的回答来设置以上 2 项。

关于c# -ModelState.IsValid 仅在资源语言更改时返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42924788/

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