2011-07-20 58 views
3

我正试图学习FubuMVC并且已经陷入了验证我的输入模型的困境。 我想完成的是后验证重定向。也就是说,如果模型无效,重定向到相同视图并显示错误。我在我的模型上使用属性。如何设置FubuMVC验证

此外,我将如何指定我自己的错误消息,即本地化?

我使用的是来自nuget的Fubu的最新软件包。

我的注册表看起来是这样的:

IncludeDiagnostics(true); 
Applies.ToThisAssembly(); 

Actions.IncludeClassesSuffixedWithController(); 

Routes 
    .HomeIs<HomeController>(x => x.Index()) 
    .IgnoreControllerNamesEntirely() 
    .IgnoreMethodsNamed("Index") 
    .IgnoreMethodsNamed("Query") 
    .IgnoreMethodsNamed("Command") 
    .IgnoreNamespaceText("Features") 
    .IgnoreMethodSuffix("Html") 
    .RootAtAssemblyNamespace() 
    .ConstrainToHttpMethod(x => x.Method.Name.EndsWith("Command"), "POST") 
    .ConstrainToHttpMethod(x => x.Method.Name.EndsWith("Query"), "GET"); 

this.UseSpark(); 
this.Validation(); 

HtmlConvention<SampleHtmlConventions>(); 
Views.TryToAttachWithDefaultConventions(); 

回答

3

的FubuMVC.Validation包是真的只是一个如何使用FubuValidation,因为我们还没有建立它所有的边缘情况的例子。话虽如此,让我稍微解释一下它是如何工作的,以便我们看看您是否可以使用它,或者如果您应该手动执行自己的验证行为。

ValidationBehavior使用IValidationFailureHandler接口来“处理”验证失败。当行为触发时,从FubuValidation构建的通知对象被推入IFubuRequest,然后处理程序被调用。

对于所有 验证失败,ValidationFailureHandler类默认连线。这会将IalidationFailurePolicy委托给 确定用于给定模型类型的策略(请参阅我在 政策中的帖子,以了解其工作原理的解释)。

的验证扩展方法有一个重载这给微 DSL配置这些策略:

this.Validation(x => { 
    x.Failures.... 
}); 

从这里通过ApplyPolicy方法 你可以1)应用定制策略或2)使用谓词通过IfModel方法实现基于配置的方法。

如果您使用谓词路径(例如x.Failures.IfModelIs()),则可以告诉FubuMVC.Validation使用FubuContinuations来重定向或转移到另一个行为 链。 Rex最近发布了关于FubuContinuations的信息,如果你正在寻找这方面的一些指导(http://rexflex.net/2011/07/fubumvc-fubucontinuation/)。

希望这有助于和随时问路程,如果我没有解释任何东西不够,
乔希

+0

貌似IfModelIs是不会削减对我来说,如果我理解正确的方法。试图使用ApplyPolicy,但不确定如何使用它。 – Henning

+0

你搞定了这个结果吗?我认为我的最新下降足以应付您的任何情况。 – jmarnold

+0

其实是的,非常感谢新东西。 Atm它完美地工作:D。我会看看我是否可以扩展您的演示项目或创建自己的演示项目。 – Henning