6

FluentValidationをクライアント側の検証で正しく機能させようとしています。ASP.NETMVC3を使用しています。

必要なタイトルがあり、1〜100文字の長さである必要があります。そのため、タイトルを入力しているときに、ルールセットにないエラーメッセージが表示されます。これが私のルールセットです:

RuleFor(x => x.Title)
   .NotEmpty()
   .WithMessage("Title is required")
   .Length(1, 100)
   .WithMessage("Title must be less than or equal to 100 characters");

表示されるエラーメッセージは次のとおりです。

Please enter a value less than or equal to 100

何が間違っているのかわかりません。これが私のglobal.asaxです。

// FluentValidation
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(
   new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));

ModelMetadataProviders.Current = new FluentValidationModelMetadataProvider(
   new AttributedValidatorFactory());
4

1 に答える 1

13

私にとってはうまくいきます。手順は次のとおりです。

  1. 既定の Visual Studio テンプレートを使用して、新しい ASP.NET MVC 3 RTM プロジェクトを作成します。
  2. 最新のFluentValidation.NET をダウンロードします
  3. FluentValidation.dllおよびアセンブリを参照しFluentValidation.Mvc.dllます (.zip 内に MVC2 と MVC3 の 2 つのフォルダーがあることに注意してください。適切なアセンブリを選択してください)。

モデルを追加します。

[Validator(typeof(MyViewModelValidator))]
public class MyViewModel
{
    public string Title { get; set; }
}

および対応するバリデータ:

public class MyViewModelValidator : AbstractValidator<MyViewModel>
{
    public MyViewModelValidator()
    {
        RuleFor(x => x.Title)
           .NotEmpty()
           .WithMessage("Title is required")
           .Length(1, 5)
           .WithMessage("Title must be less than or equal to 5 characters");
    }
}

に追加Application_Start:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(
    new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));

ModelMetadataProviders.Current = new FluentValidationModelMetadataProvider(
    new AttributedValidatorFactory());

コントローラーを追加します。

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}

および対応するビュー:

@model SomeApp.Models.MyViewModel
@{
    ViewBag.Title = "Home Page";
}
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
    @Html.TextBoxFor(x => x.Title)
    @Html.ValidationMessageFor(x => x.Title)
    <input type="submit" value="OK" />
}

ここで、タイトル入力を空のままにしてフォームを送信してみてください => クライアント側の検証が開始され、タイトルが必要ですというメッセージが表示されます。ここでテキストの入力を開始します => エラー メッセージが消えます。入力ボックスに 5 文字を超える文字を入力すると、タイトルは 5 文字以下でなければなりませんという検証メッセージが表示されます。したがって、すべてが期待どおりに機能するようです。

于 2011-01-17T15:32:10.337 に答える