我的控制器工作中有这个方法。但是,如果用户想要返回我回去的方式,则不会刷新页面。在此处的前一个帖子中,建议我将强类型视图从使用Ticket
模型切换为使用新的TicketView
模型。这解决了问题,点击链接回去不刷新。虽然,不幸的是现在我无法编辑我的门票。这是我用来编辑故障单的控制器代码:
public ActionResult EditTechTicket(TicketView ticketReturn, string returnUrl)
{
if (ModelState.IsValid)
{
ticket.TicketId = ticket.TicketId;
ticket.CategoryId = ticketReturn.CategoryId;
if (ticketReturn.TicketStatusId == new Guid("553F4C93-4A72-44BD-A9CE-FAB4F87D4E08") & ticket.CloseDate == null)
{
ticket.CloseDate = DateTime.Now;
}
else if (ticketReturn.TicketStatusId != new Guid("553F4C93-4A72-44BD-A9CE-FAB4F87D4E08") & ticket.CloseDate != null)
{
ticket.CloseDate = null;
}
else
{
ticket.CloseDate = ticketReturn.CloseDate;
}
ticket.OpenDate = ticketReturn.OpenDate;
ticket.OpenUserId = ticketReturn.OpenUserId;
ticket.TechnicianId = ticketReturn.TechnicianId;
ticket.TicketNumber = ticketReturn.TicketNumber;
ticket.TicketStatusId = ticketReturn.TicketStatusId;
tickets.Update(ticket);
tickets.Commit();
return RedirectToAction("EditTechTicket", new { id = ticketReturn.TicketId, returnUrl = returnUrl });
}
代码在tickets.Commit();
语句中崩溃。我错过了什么?
这就是崩溃所说的:
将datetime2数据类型转换为日期时间数据类型会导致超出范围的值。
我已经检查了Open Date的模型和视图模型都是不可为空的,并且closeate的模型和视图模型都可以为空。
答案 0 :(得分:4)
您已经有异常的答案
将datetime2数据类型转换为日期时间数据类型 导致了超出范围的价值。
存储到sql server的任何日期必须介于1/1/1753 12:00:00 AM和12/31/9999之间。它是否为null DateTime无关紧要。如果你传回一个DateTime.Min()的值,那么它每次都会出错。
如评论中所述,如果您的DateTime值没有变化,那么您只需在表单上创建一个隐藏字段,或者 readonly 字段,即回发正确的数据。请注意,禁用的字段不会回发,也可能是您问题的一部分。
您应该更新此行以使用传入的ticketReturn视图模型。
ticket.TicketId = ticketReturn.TicketId;