我的申请表中有一个Student课程如下:
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public string RoleNum { get; set; }
public DateTime RegistrationDate { get; set; }
public DateTime AdmissionDate { get; set; }
}
现在我在应用程序中有一些更新学生模型的视图。但并非每个视图都需要更新数据库中学生表的每个字段。例如首次创建学生时,注册日期仅设置一次。现在,编辑学生视图不应再次更新RegistrationDate。
问题是RegistrationDate是数据库中的必填字段,因此不包括视图形式中的字段会在RegistrationDate中产生NULL异常。
为了防止这种情况,我在一个div中隐藏了RegistrationDate字段,因此它在表单中不可见。这是做这件事的正确方法还是我错过了一个非常简单的方法?
答案 0 :(得分:0)
而不是隐藏它们......只需将它们隐藏起来:
@Html.HiddenFor(model => model.RegistrationDate)
或者其他选项只是使用Hidden作为学生ID,并且一旦将数据发布到服务器(RegistrationDate将为null)...您可以从数据库中获取Student并填充您的null值
第二个选项更安全一点,因为用户无法在客户端隐藏中更改注册日期。
答案 1 :(得分:0)
更新实体时,我们的想法是首先使用ID从数据库中获取要更新的实体,然后使用TryUpdateModel
方法仅更新原始请求中的字段和最后保存模型。
以下是更新实体的常用模式:
[HttpPost]
public ActionResult Update(int id)
{
Student student = Repository.GetStudent(id);
if (!TryUpdateModel(student))
{
// there were validation errors => redisplay the view
return View(student);
}
// the model is valid => at this stage we could save it
Repository.Update(student);
return RedirectToAction("success");
}