Asp.net mvc MVC 4:忽略编辑视图中的字段并在控制器中自动设置
我希望开始日期与首次创建票证时最初设置的日期保持一致 我已从/Ticket/Edit视图中删除了字段,并尝试在控制器中设置StartDate属性,以便它自动为用户输入该属性 然而,我似乎无法让它工作 这是我的机票型号: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
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的值将返回到postticket.StartDate=ticket.StartDate 你到底在这里干什么? 这绝对不起作用,你是在用同一个变量的值覆盖变量的值吗 当您在编辑时保存票据时,会发生什么情况? 它是否自动更新到最新日期?
这是怎么回事。你一定是在写日期时间。现在是在什么地方?我看不到你的电脑中有任何地方在手动更改日期。数据库中的内容应该直接传递给视图。您看到的是什么?我没有尝试在GET控制器中设置日期;我曾尝试在邮局管理员中这样做。我只是加入了GET控制器,以防我也加入了一些东西?啊,好吧,有道理。当我在编辑时保存票据时,它会在此时抛出一个错误,因为它是必填字段。因此,我需要在控制器中设置它。是的,在创建了一个票证之后,我已经将它设置为StartDate=DateTime。现在,从viewHi中删除了StartDate的html帮助程序,那么它的安全性呢?请看。或者,您可以使用ViewModel,一般来说,您不必担心约会的安全性。我上面的代码确实使用了视图模型。要让它回发到控制器,它必须位于视图上的for helper中,否则它将在回发中丢失