Asp.net mvc MVC 4:忽略编辑视图中的字段并在控制器中自动设置

Asp.net mvc MVC 4:忽略编辑视图中的字段并在控制器中自动设置,asp.net-mvc,asp.net-mvc-4,view,controller,Asp.net Mvc,Asp.net Mvc 4,View,Controller,我希望开始日期与首次创建票证时最初设置的日期保持一致 我已从/Ticket/Edit视图中删除了字段,并尝试在控制器中设置StartDate属性,以便它自动为用户输入该属性 然而,我似乎无法让它工作 这是我的机票型号: public class Ticket { [DisplayName("Ticket No.")] public int TicketID { get; set; } public int HardwareID { get; set; } publ

我希望开始日期与首次创建票证时最初设置的日期保持一致

我已从/Ticket/Edit视图中删除了字段,并尝试在控制器中设置StartDate属性,以便它自动为用户输入该属性

然而,我似乎无法让它工作

这是我的机票型号:

public class Ticket
{
    [DisplayName("Ticket No.")]
    public int TicketID { get; set; }
    public int HardwareID { get; set; }
    public int StatusID { get; set; }
    public int PriorityID { get; set; }

    [StringLength(100)]
    [DisplayName("Summary")]
    public string Summary { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    [DisplayName("Date Created")]
    public DateTime StartDate { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    [DisplayName("Due Date")]
    public DateTime DueDate { get; set; }

    [DisplayName("Hardware Delivered?")]
    public Boolean HardwareDelivered { get; set; }

    public virtual Employee Employee { get; set; }
    public virtual Hardware Hardware { get; set; }
    public virtual Status Status { get; set; }
    public virtual Priority Priority { get; set; }
    public virtual AssignTicket AssignTicket { get; set; }
}
这是我的/票据/视图控制器(GET和POST),其中包括我尝试将StartDate设置为为该特定票据设置的现有StartDate:

//
    // GET: /Ticket/Edit/5

    public ActionResult Edit(int id = 0)
    {
        Ticket ticket = db.Tickets.Find(id);
        if (ticket == null)
        {
            return HttpNotFound();
        }
        ViewBag.HardwareID = new SelectList(db.Hardwares, "HardwareID", "SerialNumber", ticket.HardwareID);
        ViewBag.StatusID = new SelectList(db.Statuses, "StatusID", "StatusName", ticket.StatusID);
        ViewBag.PriorityID = new SelectList(db.Priorities, "PriorityID", "PriorityName", ticket.PriorityID);
        return View(ticket);
    }

    //
    // POST: /Ticket/Edit/5

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(Ticket ticket)
    {
        if (ModelState.IsValid)
        {
            ticket.StartDate = ticket.StartDate;
            db.Entry(ticket).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.HardwareID = new SelectList(db.Hardwares, "HardwareID", "SerialNumber", ticket.HardwareID);
        ViewBag.StatusID = new SelectList(db.Statuses, "StatusID", "StatusName", ticket.StatusID);
        ViewBag.PriorityID = new SelectList(db.Priorities, "PriorityID", "PriorityName", ticket.PriorityID);
        return View(ticket);
    }

任何帮助都将不胜感激

您在帖子中的设置只是将日期设置为自身。如果要在整个过程中维护StartDate,则需要将其放在视图(显示器除外)上的for helper中,并将其发回控制器

@Html.HiddenFor(x => x.StartDate)  // if you don't want to display it or use the display for to show it

使用此选项,您无需将其设置为自身。get的值将返回到post

ticket.StartDate=ticket.StartDate

你到底在这里干什么? 这绝对不起作用,你是在用同一个变量的值覆盖变量的值吗

当您在编辑时保存票据时,会发生什么情况? 它是否自动更新到最新日期?
这是怎么回事。你一定是在写日期时间。现在是在什么地方?

我看不到你的电脑中有任何地方在手动更改日期。数据库中的内容应该直接传递给视图。您看到的是什么?我没有尝试在GET控制器中设置日期;我曾尝试在邮局管理员中这样做。我只是加入了GET控制器,以防我也加入了一些东西?啊,好吧,有道理。当我在编辑时保存票据时,它会在此时抛出一个错误,因为它是必填字段。因此,我需要在控制器中设置它。是的,在创建了一个票证之后,我已经将它设置为StartDate=DateTime。现在,从viewHi中删除了StartDate的html帮助程序,那么它的安全性呢?请看。或者,您可以使用ViewModel,一般来说,您不必担心约会的安全性。我上面的代码确实使用了视图模型。要让它回发到控制器,它必须位于视图上的for helper中,否则它将在回发中丢失