我一直在尝试正确实现表单验证,关于 fubu 邮件列表的讨论最有帮助(http://groups.google.com/group/fubumvc-devel/browse_thread/thread/d54b135fe0254653/12180cd86e9dc50b)。在某些方面我仍然不完全清楚,我是新手,所以我正在刮牦牛。
似乎讨论中给出的示例使用 IsValid(model) 在控制器本身内执行了验证。
我试图通过使用Required 等验证属性装饰我的输入模型来避免这种情况,然后使用验证配置在失败时传输(通过策略)。
this.Validation(x => {
x.Actions
.Include(call => call.HasInput && call.InputType().Name.EndsWith("Input"));
x.Failures
.ApplyPolicy<AccountValidationFailedPolicy>();
});
这是实现策略的类:
public class AccountValidationFailedPolicy : IValidationFailurePolicy {
public bool Matches(ValidationFailure context) {
return (context.InputType() == typeof (RegisterAccountInput));
}
public void Handle(ValidationFailure context) {
var incomingRequest = (RegisterAccountInput) context.InputModel;
var failedValidation = new RegisterationFailedNotification {
CVV = incomingRequest.CVV,
AcceptTerms = incomingRequest.AcceptTerms,
Countries = incomingRequest.Countries,
PhoneNumber = incomingRequest.PhoneNumber,
PIN = incomingRequest.PIN
};
FubuContinuation.TransferTo(failedValidation);
}
}
Handle 只是尝试通过新模型转移到另一个动作,将值复制到新模型中,以便我可以在表单上再次显示它们。
我一定在这里做错了什么,因为它没有转移到任何地方。我有一个使用这种方法的课程,我希望能处理它。
public AccountViewModel New(RegisterationFailedNotification 通知) { .... }
我在这里是否步入正轨,或者有什么基本的东西我没有得到?也许政策不是这里要做的事情?