Asp.net fubumvc-使用IFailureValidationPolicy的简单表单验证
我一直在努力正确地实现表单验证,关于fubu邮件列表的讨论是最有帮助的()。 在某些方面我还不完全清楚,我是一个新手,所以我正在经历一些牦牛剃须 讨论中给出的示例似乎使用IsValid(model)在控制器内部执行了验证 我试图通过使用诸如Required之类的验证属性装饰输入模型,然后使用验证配置在失败时传输(通过策略)来避免这种情况 Handle只是尝试通过一个新模型转移到另一个操作,将值复制到新模型中,以便我可以在表单上再次显示它们 我一定是做错了什么,因为它不会转移到任何地方。 我有一个使用这种方法的类,我希望能处理它 public AccountViewModel新建(RegisterationFailedNotification通知){ .... } 我是走上正轨了,还是有一些基本的东西我没有得到?也许政策不是这里要做的事?@stantona 政策机制将在这里发挥作用。我将向您详细介绍我计划如何(很快)简化此过程,并注意您使用FubuContinuation.TransferTo只创建一个FubuContinuation,它不会执行它 以下是您需要的:Asp.net fubumvc-使用IFailureValidationPolicy的简单表单验证,asp.net,fubumvc,Asp.net,Fubumvc,我一直在努力正确地实现表单验证,关于fubu邮件列表的讨论是最有帮助的()。 在某些方面我还不完全清楚,我是一个新手,所以我正在经历一些牦牛剃须 讨论中给出的示例似乎使用IsValid(model)在控制器内部执行了验证 我试图通过使用诸如Required之类的验证属性装饰输入模型,然后使用验证配置在失败时传输(通过策略)来避免这种情况 Handle只是尝试通过一个新模型转移到另一个操作,将值复制到新模型中,以便我可以在表单上再次显示它们 我一定是做错了什么,因为它不会转移到任何地方。 我有一个
public class AccountValidationFailedPolicy : IValidationFailurePolicy {
private readonly IFubuRequest _request;
private readonly IValidationContinuationHandler _handler;
public AccountValidationFailedPolicy(IFubuRequest request, IValidationContinuationHandler handler) {
_request = request;
_handler = handler;
}
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
};
var continuation = FubuContinuation.TransferTo(failedValidation);
_request.Set(continuation);
_handler.Handle();
}
}
@斯坦托纳
政策机制将在这里发挥作用。我将向您详细介绍我计划如何(很快)简化此过程,并注意您使用FubuContinuation.TransferTo只创建一个FubuContinuation,它不会执行它
以下是您需要的:
public class AccountValidationFailedPolicy : IValidationFailurePolicy {
private readonly IFubuRequest _request;
private readonly IValidationContinuationHandler _handler;
public AccountValidationFailedPolicy(IFubuRequest request, IValidationContinuationHandler handler) {
_request = request;
_handler = handler;
}
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
};
var continuation = FubuContinuation.TransferTo(failedValidation);
_request.Set(continuation);
_handler.Handle();
}
}
谢谢,那是我丢失的一块。我想确认这是否是此类验证场景的最佳实践?我关心的是,我必须将RegistrationFailedNotification模型中的细节映射到操作中的视图模型。对我来说似乎有点冗长,但接下来我仍然会接受一些基本概念。我在这里详细介绍一下:但这里有一个我所想的示例:public RegisterAccountModel Get(RegisterAccountModel model){//如果需要做其他事情,请返回model;}public FubuContinuation Post(RegisterAccountModel模型){//只有在验证通过并返回FubuContinuation.Redirect…}时才会调用此函数。确定,因此代码格式在注释中不起作用。但这就是我的想法——保持你的模型对称,一切都变得简单多了。酷,这就是我处理事情的方式,使用对称模型和automapper在它们之间进行映射。如果框架能够自动完成这项工作,那就太好了,也就是说,当您请求继续时,可以选择使用从输入模型映射的属性创建新模型。我只是想了想,不知道这是不是一个常见的场景。谢谢,这是我丢失的一部分。我想确认这是否是此类验证场景的最佳实践?我关心的是,我必须将RegistrationFailedNotification模型中的细节映射到操作中的视图模型。对我来说似乎有点冗长,但接下来我仍然会接受一些基本概念。我在这里详细介绍一下:但这里有一个我所想的示例:public RegisterAccountModel Get(RegisterAccountModel model){//如果需要做其他事情,请返回model;}public FubuContinuation Post(RegisterAccountModel模型){//只有在验证通过并返回FubuContinuation.Redirect…}时才会调用此函数。确定,因此代码格式在注释中不起作用。但这就是我的想法——保持你的模型对称,一切都变得简单多了。酷,这就是我处理事情的方式,使用对称模型和automapper在它们之间进行映射。如果框架能够自动完成这项工作,那就太好了,也就是说,当您请求继续时,可以选择使用从输入模型映射的属性创建新模型。我只是想了想,不知道这是不是一个常见的情况。
public class AccountValidationFailedPolicy : IValidationFailurePolicy {
private readonly IFubuRequest _request;
private readonly IValidationContinuationHandler _handler;
public AccountValidationFailedPolicy(IFubuRequest request, IValidationContinuationHandler handler) {
_request = request;
_handler = handler;
}
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
};
var continuation = FubuContinuation.TransferTo(failedValidation);
_request.Set(continuation);
_handler.Handle();
}
}