覆盖视图模型中的“必需”属性



我有一个视图模型,我正在将其用于由我的网站表示的对象。我们称之为Student.

我很高兴通过对"添加"、"详细信息"和"编辑"视图使用相同的视图模型来最大程度地减少应用程序的混乱。

但是,某些元素不应在"编辑"视图中进行编辑,例如"密码"。所以我从视图中删除了这些。

但是,现在ModelState.IsValid回发报告错误。

有没有一种直接的方法可以对所有这些视图使用相同的视图,但以某种方式覆盖我的编辑视图所需的状态?

注意:我意识到我可以使用隐藏字段。但是我不习惯将密码等数据发送到客户端并返回。我只是宁愿不在这里暴露它。

因此,正如其他人指出的那样,这种情况通常需要不同的视图模型类。并且可以使用继承更简洁地完成此操作。

但还有另一种选择。虽然不完美,但更接近我想要的东西。

当您的表单回发时,任何错误都存储在 ModelState 中。如果您知道有一些无关紧要的错误,则可以清除这些错误。请注意,清除所有错误将导致ModelState.IsValidfalse 更改为 true

public ActionResult Edit(TrainerModel model)
{
    ModelState[nameof(model.Email)]?.Errors?.Clear();
    ModelState[nameof(model.Password)]?.Errors?.Clear();
    if (ModelState.IsValid)
    {
        //
    }
    return View(model);
 }

相关内容

  • 没有找到相关文章