【发布时间】:2023-03-30 11:31:01
【问题描述】:
我收到此错误:
“将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。
语句已终止。”
与用户交互的视图有如下相关代码:
@Html.LabelFor(model => model.BirthDate)
@Html.TextBoxFor(model => model.BirthDate, new { size = "50", @type = "date", @class = "AddMemberControls" })
用户必须输入日期的文本框显示“mm/dd/yyyy”(它显示了一个日历,用户可以在其中选择日期)
控制器方法如下所示:
public ActionResult AddMember(string firstName, string lastName, DateTime birthDate, int age, string sportType)
{
var member = new Member() { FirstName = firstName, LastName = lastName, Age = age, SportType = sportType, BirthDate = birthDate };
coloContext.Members.Add(member);
coloContext.SaveChanges();
return View();
}
和型号:
[Column(TypeName = "datetime2")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime BirthDate { get; set; }
例如,如果用户选择日期05/01/18,那么在调试和检查生日参数时,它会显示01-May-18 12:00:00 AM
我想问题是它写了“May”,而数据库不知道如何保存?
我看到互联网上有很多关于这个问题的信息,并且尝试了几次解决方案,但不幸的是,我都没有成功。
我试过了:
使用列类型名称添加注释
[Column(TypeName = "datetime2")]
在我的模型中将 Datime 设为 nullabe(建议了几种解决方案)。但是这个解决方案对我来说没有多大意义。尤其是当我知道这个参数不能为空时
public DateTime? BirthDate { get; set; }
试图解析DateTime,希望它能摆脱“May”。如果可能的话,我希望以这种格式保存日期。
DateTime test = DateTime.parse(birthDate.ToString())
有人建议改成DateTime2,但是没有对象叫DateTime2?无论如何我都试过了,但出现了错误
public DateTime2 BirthDate { get; set; }
还有一些我忘记的其他解决方案。
【问题讨论】:
-
01-May-18 12:00:00 AM就是它向您显示的方式。错误消息意味着您发回的值不在有效范围内,我假设您的DateTime birthDate是01/01.0001(以及为什么您没有绑定到您的模型) -
此错误消息可能是由于
BirthDate被设置为默认日期时间值 0001-01-01。 -
使用像 05/01/2018 这样的值,您不会收到该错误。但是,您不是绑定到您的模型,而是传递参数。也许你有错误,你没有提供设置这些参数的代码。绑定到模型将是最简单的事情。
-
我不确定你们所说的“绑定到模型”是什么意思?我在不到 2 周前才开始使用 asp.net mvc,所以我只是初学者。
-
您的 POST 方法应该是
public ActionResult AddMember(xxx model)其中xxx是您在视图中使用的模型
标签: c# asp.net-mvc entity-framework