我想创建一个自定义模型绑定器来验证有界模型。我发现了几个这样的例子,它的工作原理应该如此。但是,如果模型中存在错误,我还希望能够将用户发回到他来自的页面。自定义模型绑定器
这样做是否可行?是否有任何明显的副作用?
我想要实现的是控制器总是获取有效的命令,所以我不需要检查action.Method中的model.IsValid()。
我想创建一个自定义模型绑定器来验证有界模型。我发现了几个这样的例子,它的工作原理应该如此。但是,如果模型中存在错误,我还希望能够将用户发回到他来自的页面。自定义模型绑定器
这样做是否可行?是否有任何明显的副作用?
我想要实现的是控制器总是获取有效的命令,所以我不需要检查action.Method中的model.IsValid()。
你试图做的看起来不错,但它不会工作。限制太多了。
您可以设置将检查模型错误(活页夹设置)和重定向(setup.Result)的全局操作过滤器(在基本控制器上)。但是这很复杂,需要太多额外的“代码” - 属性等,这些很难跟踪并与真实的应用程序逻辑相关联。它变得过于严格很快(见漏抽象法),当你需要不出错重定向只是简单的动作名称等
这看起来多简单,当这样做:
public ActionResult PostAction(ViewModel data)
{
if (!ModelState.IsValid)
return View("GetAction", data.WithDropDownList(repository.GetProducts()));
}
在上面的例子中,控制器可以控制工作流程,就像它应该那样。它也有自由执行额外的验证/设置。你仍然可以使用尽可能多的基础设施 - 模型粘合剂来提供模型状态错误等 - 但只有控制器应该对输入和输出做出最终决定。
你是对的,它的控制者应该处理这些错误,我会坚持我的验证模型构建器并让控制器处理这个动作。 – walie 2010-06-28 06:00:15
您可以分享您已阅读的文章,并显示您目前为止的代码吗? – 2010-06-26 08:50:30
达林,我不能分享我的代码atm,但这里有一篇关于它的文章。 http://schotime.net/blog/index.php/2009/05/11/fluent-validation-model-binder-aspnet-mvc/我不使用Fluent验证,但概念是相同的。 – walie 2010-06-28 06:02:24