我的剃刀视图中有一个字段,如下所示
@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; }
}
}
控制器上的我的代码就像这样
[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."
如何为另一种资源语言修复它?任何帮助将不胜感激
答案 0 :(得分:2)
您收到该错误是因为您的网站文化设置为不使用点.
作为小数点分隔符的语言(法语)。但是Duration
的条目中有一个点,因此您的模型状态正在评估为无效。
换句话说,您的网站(服务器端)是法国文化,但浏览器或您使用的任何客户端都不是法语。
<强>修正强>
您需要同步客户端和服务器的语言 ON EVERY REQUEST :确保为每个请求执行设置文化的代码,而不仅仅是在应用程序启动时。用户可以在请求之间切换语言。将CurrentCulture
设置为适当的语言将使用该语言的数字格式,日期时间格式等。
此外,建议但不要求修复您的问题,您还应该设置CurrentUICulture
,它将从您的资源文件中获取该语言的标签,消息等(如果您有任何资源文件) 。
按照上面的@ orhun.begendi回答设置上述两项。
答案 1 :(得分:0)
您可以像这样轻松覆盖您的global.asax.cs文件
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
//Create culture info object
CultureInfo ci = new CultureInfo("en");
if(Request.Url.Host.Equals("yourdomain.com", StringComparison.InvariantCultureIgnoreCase))
{
ci = new CultureInfo("fr"); //in your case
}
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
}
您也可以在begin_request方法中设置。
您可以查看此链接的更多信息 https://www.codeproject.com/articles/778040/beginners-tutorial-on-globalization-and-localizati