我想创建一个验证有限模型的自定义模型框。我发现了几个例子,并且可以根据应有的作用。但是,如果模型中存在错误,我也希望能够将用户送回他来自的页面。

这是否可以做到,这样做是否有明显的副作用?

我要实现的是控制器始终获得有效的命令,因此我不需要在操作方法中检查Model.isvalid()。

有帮助吗?

解决方案

您尝试做的事情看起来不错,但它行不通。限制太多了。

  1. 通常,只有控制器可以决定在发生错误时重定向。您可以使用[OnError(“ Action”)]等其他属性,但这看起来像解决方法。
  2. 表格不发布 全部 数据。例如,下拉列表,必须由控制器填充辅助值。您可能可以为此使用动作过滤器,但这再次看起来像是黑客。

您可以设置全局操作过滤器(在基本控制器上),该过滤器将检查模型错误(该粘合剂集)和重定向(设置.Result)。但这是令人费解的,需要太多额外的“代码” - 属性等,然后很难跟踪和与真实的应用程序逻辑相关。而且它变得过于限制(请参阅漏水定律),当您不需要简单的操作名称重定向时,等等。

这看起来 很多 这样做时会更简单:

public ActionResult PostAction(ViewModel data)
{
   if (!ModelState.IsValid)
      return View("GetAction", data.WithDropDownList(repository.GetProducts()));

}

在上面的示例中,控制器可以控制工作流,就像应有的一样。它还具有执行其他验证/设置的自由。您仍然可以使用尽可能多的基础架构 - 模型绑定器来提供模型状态错误等 - 但是只有控制器才能对输入和输出做出最终决定。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top