0

現在、ジェネリックを表示しているだけです

「イニシャル」を空にすることはできません。

次のルールのメッセージ:

context.RulesFor(p => p.Initials).Required(p => p.Message("Initials are frikking required.")).Length(0, 8);

イニシャルのプロパティは、表示名属性さえもなしに、かなり大きなタイプのモデルで宣言されていますが、表示名を追加しても同じ問題がありますApplicantProfileModel : MappedViewModel<ApplicantProfile>public string Initials { get; set; }

Requiredビューモデルに属性が残っていません。

コントローラーのアクション コードは次のとおりです。

[HttpGet]
public ActionResult Create()
{
    var applicant = _applicantService.BuildApplicantProfile();
    var model = new ApplicantProfileModel();
    model.MapFromEntity(applicant);
    return View(model);
}

これは私の最後の多数のプロジェクトの標準コードであり、FluentValidation カスタム メッセージ以外はすべて機能します。彼らの検証はうまくいきます。

ビューは次のとおりです。

<li class="form-line">
    @Html.LabelFor(m => m.Initials)
    @Html.EditorFor(m => m.Initials)
    @Html.ValidationMessageFor(m => m.Initials)
</li>

私も試しTextBoxForましたが、違いはありませんでした。

4

2 に答える 2

0

[Required]プロパティに DataAnnotation 属性を残しましたか? それらがオンのままになっていると、カスタム検証ルールの代わりにそれらが表示されることがわかりました。

編集:これは私が過去にバリデーターを設定した方法です-それは、あなたがaHttpGetではなくaHttpPostを実行していて、手動でValidateを呼び出す必要があるため、それらが起動していない可能性もありますか?

public class ApplicantProfileModelValidator : AbstractValidator<ApplicantProfileModel>
{
    public ApplicantProfileModelValidator()
    {
        RuleFor(r => r.Initials)
            .NotEmpty()
            .WithMessage("Initials are frikking required.");
    }
}
于 2013-01-21T08:20:15.717 に答える
0

2 つの異なるが非常によく似た検証ライブラリを混同していたことが判明しました。最初はASP.NET MVC fluent validation framework、または NuGet ではFluentMVCとして知られているものから始めました。これには、モデルに と呼ばれるメソッドを実装する必要があります。このメソッドではInitializeModel(ModelContext<TModel> context)、さまざまなプロパティのルールを追加します。

context.RulesFor(p => p.Id).Required(p => p.Message("Id is missing. Message may have been tampered with.").StopOnFail());

検証エンジンは、何らかの形ですべてのモデルでこのメソッドを呼び出しIModelInitializer<TModel>ます。検証済みのモデルにインターフェイスを実装するように指示されていますが、そうではないからです。これは、ルールが登録されていると言っているわけではありませんが、このライブラリの一部がアクティブであり、使用しようとしているライブラリ FluentValidation と干渉しています。これは NuGet では FluentValidation、FluentValidation.MVC3、および FluentValidation.MVC4 として知られています

InitializeModel私のモデルからメソッドを削除したので、うまくいっているようです。検証のための失礼なテスト メッセージが表示されるようになったため、テストやリリース マネージャーをこっそり通過することはありません。

于 2013-01-21T09:26:53.110 に答える