我正在尝试将datetime值插入数据库。我正在使用ASP.NET MVC 4和SQL服务器的实体框架。
using (dc = new GateEntities())
{
tblSite site = new tblSite();
site.CalledInAt = DateTime.Parse("19/09/2013 00:29 AM", new CultureInfo("en- US", false));
dc.tblSites.Add(site);
dc.SaveChanges();
}
当我尝试保存数据时,我收到错误:
“值'19 / 09/2013 00:29 AM'对CalledInAt无效。”
我也试过Convert.ToDateTime()
但没有用。
这在我的本地计算机上运行良好。它不能仅在我的共享托管服务器上运行。
答案 0 :(得分:0)
您列出的代码中有两个错误。
第一个(我猜是输入问题时引入的错误)是您的CultureInfo设置为'en- US'
,应该是'en-US'
另一个是美国日期格式化为月份和日期,并且在您的字符串中将设置为您设置一年中第19个月的日期。
以下代码适用于您的日期值...
DateTime.Parse("09/19/2013 00:29 AM", new System.Globalization.CultureInfo("en-US", false));
答案 1 :(得分:0)
异常是由EF的验证引起的,该验证发生在日期格式与字符串19/09/2013 00:29 AM
不同的文化中。
在从用户输入为实体属性分配值时,最好的方法是确保您独立于UI文化。这意味着在UI(可能是视图模型)中,您必须捕获用户输入并将其转换为DateTime
值。然后,您只需将DateTime
值分配给site.CalledInAt
。
另一种选择是在视图模型中包含UI文化,并使用它在控制器中进行转换。
答案 2 :(得分:0)
我在web.config中设置了文化,它开始工作。
<globalization uiCulture="en" culture="en-GB" />