Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将UICulture设置为Html.EditorFor方法_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# 将UICulture设置为Html.EditorFor方法

C# 将UICulture设置为Html.EditorFor方法,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,在我的应用程序中,MVC区域设置为“en-US”,UICulture设置为“nl-nl”。 我有一个视图,可以呈现包含Datetime对象的模型。 如果我这样渲染它: Html.EditorFor(x => x.ForFilter.FromDate) 它将以en US文化格式显示。因此,为了以荷兰语格式显示日期,我必须这样做: var shortDatePattern = System.Threading.Thread.CurrentThread.CurrentUICulture.Dat

在我的应用程序中,MVC区域设置为“en-US”,UICulture设置为“nl-nl”。
我有一个视图,可以呈现包含Datetime对象的模型。
如果我这样渲染它:

Html.EditorFor(x => x.ForFilter.FromDate)
它将以en US文化格式显示。因此,为了以荷兰语格式显示日期,我必须这样做:

var shortDatePattern = System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat.ShortDatePattern;
@Html.TextBoxFor(x => x.ForFilter.FromDate, new {Value = Model.ForFilter.FromDate.ToString(shortDatePattern) })
我知道存在可用于
DateTime
字段的
DisplayFormat
属性,但这不是解决方案,因为
UICulture
是在运行时确定的

那么,有没有更优雅的解决方案告诉
EditorFor
TextboxFor
方法使用
UICulture
而不是Culture

Model.ForFilter.FromDate.ToString("d", CultureInfo.CurrentUICulture)
会比你现在拥有的更优雅

但是,如果您想要在nl nl区域性中格式化日期(可能还有数字),为什么不将
CurrentCulture
设置为nl nl nl

例如:



Microsoft似乎忘记了MVCYE中存在非美国格式的日期,我还有另一个例子。当通过Session.CreateSQLQuery()和List()方法使用nhibernate执行手工编写的sql查询时,只会得到一个原始对象。然后,如果您尝试执行类似Convert.ToDateTime(x[1])的操作;其中,x是来自原始对象的对象数组,如果您使用的任何SQL server返回的日期格式与应用程序区域性的预期格式不匹配,则会遇到问题。这是应用程序区域性不能始终与UICulture相同的另一个原因,因为区域性是在运行时确定的。因此,对于用户X来说,文化必须是荷兰语,但对于其他用户来说,文化必须是德语。因此,我将应用程序区域性保留为en US,并且更改了UICulture,以便按照用户区域性对所有资源/日期/数字进行格式化。@user1980412-那么,为什么不将CurrentCulture设置为用户特定的区域性呢?因为有些代码依赖于en US区域性来构建一些SQL查询。例如,当进行插入/更新时,被更新的值是一个浮点值,应该在SQL级别表示为4.12,如果我将区域性设置为nl nl,我将得到4,12。如果UI也依赖于应用程序的区域性,那么我也看不到拥有UICulture属性的意义。在ASP.NET Web表单中,如果我没记错的话,在为表单上的标签设置一些值时会考虑UICulture,例如。@user1980412-那么您应该使用参数化查询。但是,如果您想生成与区域性无关的字符串,无论是对于SQL查询还是其他任何内容,都应该使用CultureInfo.InvariantCulture。我同意您使用参数化查询。例如,在使用资源时,MVC会考虑UICulture,从而为指定的资源键显示正确的字符串,这对我来说是不正确的,并且在ModelBinding的情况下或尝试执行上面描述的操作时不会发生这种情况。从这次讨论中我学到的教训是,我必须确保系统在任何文化下都能正常工作,并且忘记MVC中的UICulture。
<globalization culture="nl-NL" uiCulture="nl-NL" />