3

我正在尝试学习 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();
4

1 回答 1

3

FubuMVC.Validation 包实际上只是一个如何使用 FubuValidation 的示例,因为我们还没有为所有边缘情况构建它。话虽如此,让我稍微解释一下它是如何工作的,这样我们就可以看看你是否可以使用它,或者你是否应该手动处理你自己的验证行为。

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

ValidationFailureHandler 类默认连接所有验证失败。这将委托给 IValidationFailurePolicy 以确定用于给定模型类型的策略(有关其工作原理的说明,请参阅我关于策略的帖子)。

验证扩展方法有一个重载,它提供了一个用于配置这些策略的微 dsl:

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

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

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

希望这会有所帮助,如果我解释得不够多,请随时询问,
乔希

于 2011-07-24T03:42:31.827 回答