我有一个带有数据注释的标准EF模型。我有两列。第一个是ID,而另一个是布尔值。在数据库中,两者都不可为空。它们都被标记为“隐藏”属性。这一切都适用于UI,直到我将表单发布回服务器。
模型无法验证。我尝试过Steven Sanderson的建议来创建一个动作过滤器但是它很容易删除我没有返回服务器进行验证的值。我最终回到了以下,我认为这很难看:
try
{
ModelState["LocationId"].Errors.Clear(); -- Really ugly!
ModelState["IsEnabled"].Errors.Clear(); -- Seems really trashy to do it this way
if (ModelState.IsValid)
{
location.IsEnabled = true; -- This will eventually move to my model definition
_repo.InsertOrUpdate(location);
_repo.Save();
return RedirectToAction("Index");
}
return View();
}
catch (DataException ex)
{
ModelState.AddModelError("dataError", ex);
return View();
}
是否有人对如何清理或创建更好的解决方案有任何其他建议或想法?
由于
答案 0 :(得分:1)
您可以使用视图模型,并将要显示/拥有用户输入的数据映射到您的视图模型。在帖子上,您将验证viewmodel上的输入数据,将其映射回实体并将其保存到数据库中。
另一种方法是从您的ID和布尔属性中删除[Required]
数据注释,这样ModelState.IsValid
应该不返回false