将不会提交从Viewmodel更新模型

本文关键字:Viewmodel 更新 模型 提交 | 更新日期: 2023-09-27 17:57:30

我在控制器中使用了这个方法。但是,如果用户想返回我要返回的方式,则不会刷新页面。在这里的前一个线程中,建议我将强类型视图从使用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数据类型转换为datetime数据类型导致值超出范围。

我已经检查了Open Date的模型和视图模型都不可为null,而closedate的模型和模型都可为null。

将不会提交从Viewmodel更新模型

您已经从异常中得到了答案

将datetime2数据类型转换为datetime数据类型导致值超出范围。

存储到sql server的任何日期必须在1/1/1753 12:00:00 AM和12/31/9999之间。它是否为null DateTime并不重要。如果您正在传回DateTime的值。Min(),那么它每次都会出错。

正如评论中所说,如果您的DateTime值不变,那么您只需在表单上创建一个隐藏字段或只读字段即可返回正确的数据。请注意,禁用的字段不会返回,这可能是您的问题的一部分。

您应该更新此行以使用传入的ticketReturn视图模型。

ticket.TicketId = ticketReturn.TicketId;