Как настроить проверку FubuMVC - PullRequest
3 голосов
/ 20 июля 2011

Я пытаюсь выучить FubuMVC и застрял при проверке моих входных моделей. То, что я хочу сделать, это пост-валидация-перенаправление. То есть, перенаправить в тот же вид и показать ошибки, если модель недействительна. Я использую атрибуты на своих моделях.

Кроме того, как мне указать свои собственные сообщения об ошибках, т.е. локализацию?

Я использую последние пакеты Fubu от nuget.

Мой реестр выглядит так:

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();

1 Ответ

3 голосов
/ 24 июля 2011

Пакет FubuMVC.Validation действительно является лишь примером того, как использовать FubuValidation, поскольку мы не создали его для всех крайних случаев. Сказав это, позвольте мне немного рассказать о том, как это работает, чтобы мы могли увидеть, можете ли вы использовать его или вам просто нужно проверить собственное поведение проверки.

ValidationBehavior использует интерфейс IValidationFailureHandler для «обработки» ошибок проверки. Объект Notification, созданный из FubuValidation, помещается в IFubuRequest при срабатывании поведения, а затем вызывается обработчик.

Класс ValidationFailureHandler по умолчанию подключен для всех ошибки проверки. Это делегирует IValidationFailurePolicy для определить стратегию использования для данного типа модели (см. мой пост на политики для объяснения того, как это работает).

Метод расширения валидации имеет перегрузку, которая дает микро dsl для настройки этих политик:

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

Отсюда вы можете 1) применять пользовательские политики с помощью метода ApplyPolicy. или 2) использовать подход конфигурации на основе предикатов с помощью методов IfModel.

Если вы идете по пути предиката (например, x.Failures.IfModelIs ()), вы можете указать FubuMVC.Validation использовать FubuContinuations для перенаправления или передачи в другое поведение. цепь. Рекс недавно написал о FubuContinuations, если вы ищете руководство в этой области (http://rexflex.net/2011/07/fubumvc-fubucontinuation/).

Надеюсь, это поможет, и не стесняйтесь спрашивать, не объяснил ли я что-нибудь достаточно,
Джош

...