2014-01-30 31 views
3

在我的应用程序中,MVC Culture设置为“en-US”,UICulture设置为“NL-NL”。
我有一个视图呈现包含Datetime对象的模型。
如果我使其像这样:将UICulture设置为Html.EditorFor方法

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) }) 

我知道DisplayFormat属性,我可以使用为DateTime场的存在,但不是因为一个解决方案在运行时确定UICulture

那么,有没有更好的方法告诉EditorForTextboxFor方法使用UICulture而不是文化?

+0

微软似乎被遗忘在MVC – Liam

+0

存在非美国格式的日期是啊我还有一个例子来给予。当通过Session.CreateSQLQuery()和List()方法使用nhibernate执行手写sql查询时,您只会得到一个原始对象。然后,如果你试图做一些像Convert.ToDateTime(x [1]);其中x是来自原始对象的对象数组,如果从使用的任何SQL Server返回的日期格式与应用程序文化的预期格式不匹配,则会遇到麻烦。这是应用文化不能总是与UICulture相同的另一个原因。 – user1980412

回答

0
Model.ForFilter.FromDate.ToString("d", CultureInfo.CurrentUICulture) 

会比你目前拥有的恕我直言更优雅。

但是,如果你想在nl-NL文化中格式化日期(和推测数字),为什么不将CurrentCulture设置为nl-NL?

例如,in web.config

<globalization culture="nl-NL" uiCulture="nl-NL" /> 
+0

因为文化是在运行时确定的。因此,对于用户X而言,文化必须是荷兰语,但对于其他用户,则必须是德语。因此,我保留了应用程序文化en-US,并且更改了UICulture以便根据用户文化格式化所有资源/日期/数字。 – user1980412

+0

@ user1980412 - 那么为什么不简单地将CurrentCulture设置为用户特定的文化? – Joe

+0

,因为有一些代码依赖en-US文化来构建一些SQL查询。例如,在进行插入/更新时,如果将Culture设置为nl-NL,则更新的值应该是SQL级别为4.12的浮点数,我会得到4,12。如果我还应该依赖于UI的应用文化,那么我也不会再看到拥有UICulture属性。更进一步,在ASP.NET Web窗体中,如果我没有记错的话,例如在为窗体上的标签设置一些值时,将UICulture考虑在内。 – user1980412

相关问题