我有一个创建操作,它不会将CreatedOn和CreatedBy发送回HttpPost创建操作。
这些不是用户可定义的属性,理想情况下我根本不希望它们显示在表单上。那么如何将这些属性放入模型中,而不将它们放在表单本身上?它们应该是表单上隐藏的字段吗?
控制器
public virtual ActionResult Create()
{
var meeting = new Meeting
{
CreatedOn = DateTime.Now,
CreatedBy = User.Identity.Name,
StartDate = DateTime.Now.AddMinutes(5),
EndDate = DateTime.Now.AddHours(3)
};
ViewBag.Title = "Create Meeting";
return View(meeting);
}
[HttpPost]
public virtual ActionResult Create(Meeting meeting)
{
if (ModelState.IsValid)
{
_meetingRepository.InsertOrUpdate(meeting);
_meetingRepository.Save();
return RedirectToAction(MVC.Meetings.Details(meeting.MeetingId));
} else {
return View();
}
}
答案 0 :(得分:2)
它们应该是表单上的隐藏字段吗?
是的,这绝对是传递它们的好方法。请注意,这不安全,因为用户可以伪造POST请求并修改它们,但在您的方案中可能没问题。
因此,如果您需要安全性,另一种方法是从数据存储中重新获取它们,因为用户无法在此表单中修改它们,因此它们没有更改。