有没有办法让 DateTime 属性 在您使用 MVC 编辑其对象时保持不变?
Is there a way to make a DateTime property stay constant, as you edit its object with an MVC?
我不知道该怎么做。我的票证对象有一个名为 TicketCreationTime 的 DateTime 属性,它表示 属性 默认为 1/1/0001 凌晨 12 点;每次从门票控制器调用它的编辑实体功能时。
如何才能使 TicketCreationTime 与票证对象的更改保持一致?那样的话,创建时间就是制作票的时间了?
工单对象
public class Ticket
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime TicketCreationTime { get; set; }
public DateTime DueDate { get; set; }
public DateTime TicketUpdatedTime { get; set; }
public Ticket()
{
}
}
TicketsController 创建
public async Task<IActionResult> Create([Bind("ID,Name,Description,TicketCreationTime,DueDate,TicketUpdatedTime,CurrentStatus,Importance")] Ticket ticket)
{
if (ModelState.IsValid)
{
DateTime StartTime = DateTime.Now;
ticket.TicketCreationTime = StartTime;
ticket.TicketUpdatedTime = StartTime;
_context.Add(ticket);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(ticket);
}
TicketsController 编辑
public async Task<IActionResult> Edit(int id, [Bind("ID,Name,Description,TicketCreationTime,DueDate,TicketUpdatedTime,CurrentStatus,Importance")] Ticket ticket)
{
if (id != ticket.ID)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
ticket.TicketUpdatedTime = DateTime.Now;
_context.Update(ticket);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TicketExists(ticket.ID))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(ticket);
}
对 TicketCreationTime 使用 DateTime?
而不是 DateTime
。如果它为空则更新它:
ticket.TicketUpdatedTime = DateTime.Now;
if (ticket.TicketCreationTime is null)
{
ticket.TicketCreationTime = ticket.TicketUpdatedTime;
}
这个问题正是应用 模型 概念有用的原因,您也可以将其识别为 "M" MVC.
模型 class/object 可以看起来像 EF 实体 class/object,但它与实际数据库内容分开存在。
模型可用于显示数据(您可能并不总是希望显示所有数据,或者您可能希望以其他存储方式显示数据) and/or 模型可用于处理从呈现的网页接收 的数据。
在这种情况下,模型 class 将具有实体 class 的大部分属性,Ticket....Time
属性除外。当收到 Edit POST 命令时,您需要从 DbContext 中检索 Entity 对象,使用 Model 对象中的属性更新它,然后保存 Entity 对象。
示例代码:
public class TicketUpdateModel
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime DueDate { get; set; }
}
[HttpPost]
public async Task<IActionResult> Edit(TicketUpdateModel model)
{
var ticket = await _context.Tickets.FindAsync(model.ID);
if (ModelState.IsValid)
{
try
{
ticket.TicketUpdatedTime = DateTime.Now;
ticket.Name = model.Name;
ticket.Description = model.Description;
ticket.DueDate = model.DueDate;
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
// ....
}
return RedirectToAction(nameof(Index));
}
return View(ticket); // or perhaps use a TicketDisplayModel class
}
我不知道该怎么做。我的票证对象有一个名为 TicketCreationTime 的 DateTime 属性,它表示 属性 默认为 1/1/0001 凌晨 12 点;每次从门票控制器调用它的编辑实体功能时。
如何才能使 TicketCreationTime 与票证对象的更改保持一致?那样的话,创建时间就是制作票的时间了?
工单对象
public class Ticket
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime TicketCreationTime { get; set; }
public DateTime DueDate { get; set; }
public DateTime TicketUpdatedTime { get; set; }
public Ticket()
{
}
}
TicketsController 创建
public async Task<IActionResult> Create([Bind("ID,Name,Description,TicketCreationTime,DueDate,TicketUpdatedTime,CurrentStatus,Importance")] Ticket ticket)
{
if (ModelState.IsValid)
{
DateTime StartTime = DateTime.Now;
ticket.TicketCreationTime = StartTime;
ticket.TicketUpdatedTime = StartTime;
_context.Add(ticket);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(ticket);
}
TicketsController 编辑
public async Task<IActionResult> Edit(int id, [Bind("ID,Name,Description,TicketCreationTime,DueDate,TicketUpdatedTime,CurrentStatus,Importance")] Ticket ticket)
{
if (id != ticket.ID)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
ticket.TicketUpdatedTime = DateTime.Now;
_context.Update(ticket);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TicketExists(ticket.ID))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(ticket);
}
对 TicketCreationTime 使用 DateTime?
而不是 DateTime
。如果它为空则更新它:
ticket.TicketUpdatedTime = DateTime.Now;
if (ticket.TicketCreationTime is null)
{
ticket.TicketCreationTime = ticket.TicketUpdatedTime;
}
这个问题正是应用 模型 概念有用的原因,您也可以将其识别为 "M" MVC.
模型 class/object 可以看起来像 EF 实体 class/object,但它与实际数据库内容分开存在。
模型可用于显示数据(您可能并不总是希望显示所有数据,或者您可能希望以其他存储方式显示数据) and/or 模型可用于处理从呈现的网页接收 的数据。
在这种情况下,模型 class 将具有实体 class 的大部分属性,Ticket....Time
属性除外。当收到 Edit POST 命令时,您需要从 DbContext 中检索 Entity 对象,使用 Model 对象中的属性更新它,然后保存 Entity 对象。
示例代码:
public class TicketUpdateModel
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime DueDate { get; set; }
}
[HttpPost]
public async Task<IActionResult> Edit(TicketUpdateModel model)
{
var ticket = await _context.Tickets.FindAsync(model.ID);
if (ModelState.IsValid)
{
try
{
ticket.TicketUpdatedTime = DateTime.Now;
ticket.Name = model.Name;
ticket.Description = model.Description;
ticket.DueDate = model.DueDate;
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
// ....
}
return RedirectToAction(nameof(Index));
}
return View(ticket); // or perhaps use a TicketDisplayModel class
}