【问题标题】:Make a model invalid使模型无效
【发布时间】:2014-09-15 22:09:40
【问题描述】:

我用的是实体框架,不知道怎么加[Required] 请记住,我无法更改数据库。并且更改设计器的要求会导致不匹配错误。

所以通过我控制器上的代码,我想检查该字段是否为空,并返回一个模型状态错误。

但是,即使注释掉了if,它仍然不起作用。

        //  if (myModel.myField == null)
            ModelState.AddModelError("myField", "This field is Required");

        // For some reason, it is still valid.
        if (!ModelState.IsValid)
        {
            return View(myModel);
        }

【问题讨论】:

  • 无法理解你的问题??
  • 使用可以使用注释属性的视图模型,或者使用带有注释的元数据类。
  • @CodeCaster 但是实体框架生成模型。我不知道如何访问它,或者是否会重新生成修改。
  • EF 生成部分类。
  • @CodeCaster 我从 ssg 的回答中明白了你的意思。谢谢:)

标签: asp.net-mvc asp.net-mvc-4 modelstate


【解决方案1】:

使用视图模型(一个单独的类)而不是实体并在那里标记字段Required。这会产生一些开销(复制字段值、附加代码),但最好使用类来表示应用程序行为和域模型之间的不匹配,而不是硬编码的调整。

这还允许使用相同模型将行为传播到其他操作,而无需任何额外代码。

【讨论】:

  • 虽然这可能是更好的方法,但它没有回答为什么调用 AddModelError 不会将 ModelState.IsValid 设置为 false 的问题。
  • @demoncodemonkey 是对的,它没有解释为什么它不起作用:(
  • 很公平。但即使它有效,也不应该练习。 “模型失效”只能在绑定期间发生,而不是手动发生。事实上,这会破坏模型绑定和使用“modelstate”的目的,所以硬编码同样好。
猜你喜欢
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 2014-07-16
  • 2015-12-14
  • 2017-10-15
相关资源
最近更新 更多