从Viewmodel更新模型不会提交

时间:2015-06-22 18:33:18

标签: c# asp.net-mvc entity-framework

我的控制器工作中有这个方法。但是,如果用户想要返回我回去的方式,则不会刷新页面。在此处的前一个帖子中,建议我将强类型视图从使用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的模型和视图模型都可以为空。

1 个答案:

答案 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;