好吧我的问题是来自fluentValidation的modelvalidator在我的项目中不起作用,并且无论验证状态如何,ModelState.IsValid始终为true,我提前使用asp.net mvc 4,.net 4.5,thx。 / p>
Global.asax中
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
FluentValidationModelValidatorProvider.Configure();
}
LoginViewModel
using FluentValidation.Attributes;
namespace ViewModel.Cuentas
{
[Validator(typeof(LoginViewModel))]
public class LoginViewModel
{
public string UserName { get; set; }
public string Password { get; set; }
}
}
LoginViewModelValidator
using FluentValidation;
using FluentValidation.Results;
namespace ViewModel.Cuentas.Validadores
{
public class LoginViewModelValidator : AbstractValidator<LoginViewModel>
{
public LoginViewModelValidator()
{
RuleFor(x => x.UserName).NotEmpty().WithMessage("El Campo Usuario es Necesario");
RuleFor(x => x.Password).NotEmpty().WithMessage("El Campo Usuario es Necesario");
}
}
}
和我的帐户控制器
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginViewModel viewModel) { if (!ModelState.IsValid) { return View(); } FormsAuthentication.SetAuthCookie(viewModel.UserName, false); if (!String.IsNullOrEmpty(returnUrl) && returnUrl != "/") { return Redirect(returnUrl); } return RedirectToAction("Enviar", "Cartas"); }
答案 0 :(得分:6)
您的Validator
属性似乎包含错误的类型。你有:
[Validator(typeof(LoginViewModel))]
public class LoginViewModel
type参数应该是验证器类 - LoginViewModelValidator
。所以它会是这样的:
[Validator(typeof(LoginViewModelValidator))]
public class LoginViewModel
答案 1 :(得分:0)
除了接受的答案: 如果使用 Aspnet 核心框架的用户需要在Statrup.cs中注册为服务(在“ConfigureServices”方法下)
Matrix
[Validator(typeof(LoginViewModelValidator))]过滤器可能无法正常工作。
答案 2 :(得分:0)
此外,别忘了注册您的验证器。
services.AddTransient<IValidator<LoginViewModel>, LoginViewModelValidator>();
或
.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>())