[英]custom modelbinder
我想创建一个自定义modelbinder来验证有界模型。 我已经找到了几个这样的例子,它可以正常工作。 但是,我也希望能够在模型存在错误的情况下将用户送回他来自的页面。
这样可以做到吗,这样做有明显的副作用吗?
我要实现的是控制器始终获取有效命令,因此无需在action方法中检查model.IsValid()。
您尝试执行的操作看起来不错,但无法正常工作。 限制太多了。
您可以设置全局操作过滤器(在基本控制器上),该过滤器将检查模型错误(绑定程序设置)并重定向(设置.Result)。 但这很麻烦,并且需要太多额外的“代码”(属性)等,因此很难跟踪并与真实的应用程序逻辑相关联。 当您不仅仅需要简单的动作名称来进行错误重定向时,它很快就会变得过于严格(请参见泄漏抽象定律)。
像这样完成时,这看起来要简单得多:
public ActionResult PostAction(ViewModel data)
{
if (!ModelState.IsValid)
return View("GetAction", data.WithDropDownList(repository.GetProducts()));
}
在上面的示例中,控制器完全可以控制工作流程。 它还具有执行附加验证/设置的自由。 您仍然可以使用尽可能多的基础结构-模型绑定程序以提供ModelState错误等-但只有控制器才应对输入和输出拥有最终决定权。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.