0

我正在尝试将日期时间值插入到我的数据库中。我正在使用带有 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()但没有用。

这在我的本地机器上运行良好。它不仅适用于我的共享托管服务器。

4

3 回答 3

0

该异常是由 EF 的验证引起的,该验证发生在日期格式与 string 不同的文化中19/09/2013 00:29 AM

从用户输入为实体属性分配值时,最好的方法是确保您独立于 UI 文化。这意味着在 UI(可能是视图模型)中,您必须捕获用户输入并将其转换为DateTime值。然后你只需分配DateTime值分配给site.CalledInAt.

另一种选择是在视图模型中包含 UI 文化,并使用它在控制器中进行转换。

于 2013-09-19T09:05:10.533 回答
0

I set the culture in web.config and it started working.

 <globalization uiCulture="en" culture="en-GB" />
于 2013-09-19T11:50:09.797 回答
0

您列出的代码中有两个错误。

第一个(我猜这是键入问题时引入的错误)​​是您的 CultureInfo 被设置为'en- US'应该是'en-US'

另一个是美国日期的格式是月然后日,并且在您的字符串中,这将使您设置一年中的第 19 个月的日期。

下面的代码适用于您的日期值...

DateTime.Parse("09/19/2013 00:29 AM", new System.Globalization.CultureInfo("en-US", false));
于 2013-09-19T07:51:36.660 回答