0

我有一个带有数据注释的标准 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();
}

是否有人对如何清理此问题或创建更好的解决方案有任何其他建议或想法?

谢谢

4

1 回答 1

1

您可以使用视图模型并将您想要显示的数据映射/将用户输入从您的实体映射到您的视图模型。在发布后,您将验证视图模型上的输入数据,将其映射回实体并将其保存到您的数据库中。

另一种方法是从您的 ID 和布尔属性中删除[Required]数据注释,这种方式不应ModelState.IsValid返回false

于 2012-07-11T06:33:59.243 回答