覆盖视图模型中的Required属性

时间:2017-03-26 18:09:55

标签: c# asp.net asp.net-mvc viewmodel

我有一个我用于网站代表的对象的视图模型。我们称之为Student

我很高兴通过为“添加”,“详细信息”和“编辑”视图使用相同的视图模型来最小化我的应用程序混乱。

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

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

是否有直接的方式为所有这些视图使用相同的视图,但以某种方式覆盖了我的编辑视图所需的状态?

注意:我意识到我可以使用隐藏字段。但我不习惯将密码等数据发送到客户端并返回。我根本不想在这里公开它。

1 个答案:

答案 0 :(得分:3)

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

但还有另一种选择。虽然不完美,但与我所寻找的东西更接近。

当您的表单发回时,任何错误都会存储在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);
 }