3

私の問題は、fluentValidation の modelvalidator が私のプロジェクトで機能していないことです。検証の状態に関係なく、ModelState.IsValid は常に true です。事前に asp.net mvc 4、.net 4.5、thx を使用しています。

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");
    }
4

3 に答える 3

7

属性Validatorのタイプが間違っているようです。あなたが持っている:

[Validator(typeof(LoginViewModel))]
public class LoginViewModel

type 引数は、バリデータ クラス - である必要がありますLoginViewModelValidator。したがって、次のようになります。

[Validator(typeof(LoginViewModelValidator))]
public class LoginViewModel
于 2013-06-28T15:11:27.017 に答える
0

受け入れられた回答への追加: Aspnet Coreフレームワークを使用しているユーザーを Statrup.cs でサービスとして登録する必要がある場合 (「ConfigureServices」メソッドの下)

services.AddTransient<IValidator<LoginViewModel>, LoginViewModelValidator>();

[Validator(typeof(LoginViewModelValidator))] フィルターが期待どおりに機能しない場合があります。

于 2017-11-12T11:52:54.860 に答える