0

現在、ユーザーがコンテンツを投稿できるようにするフォームを作成しています。WMDエディターを使用したいので、Entity FrameworkContentモデルには、 HTMLフィールドとWMDフィールドを保持するという名前の複合型があります。

フォームには、タイトル用のテキストボックスと、用のWMDエディターがありContent、次のようにFluentValidationフレームワークを使用しました。

public class ArticleValidator : AbstractValidator<Article>
{
    public ArticleValidator()
    {
        RuleFor(x => x.Title).NotEmpty();
        RuleFor(x => x.Content.WMD).NotEmpty();
    }
}

何も入力せずにこのフォームを送信すると、クライアント側の検証ではタイトルのみが無効として検出されます。タイトルに何かを入力すると、フォームが送信され(コンテンツが空であっても)、サーバー側でエラーがキャッチされ(コンテンツが空)、入力した情報がページに再読み込みされますが、エラーメッセージは表示されませんが表示されました。

EntityFrameworkモデルで作成した複合型がこの問題を引き起こしているようです。ContentHtml以前はとのプロパティが別々でしたが、ContentWMD正常に機能しました。

以前の場所に戻らなくても、これに対する回避策はありますか?

4

1 に答える 1

0

次のようなネストされたルール定義は使用できません。

RuleFor(x => x.Content.WMD).NotEmpty();

コンテンツタイプ用に別のバリデーターが必要です。

public class ArticleValidator : AbstractValidator<Content>
{
    public ArticleValidator()
    {
        RuleFor(x => x.WMD).NotEmpty();
    }
}

これは、ビュー内でEFモデルを使用するべきではないと言われています。ビューモデルを使用し、ビューモデルに検証ルールを定義する必要があります。

public class ArticleValidator : AbstractValidator<ArticleViewModel>
{
    public ArticleValidator()
    {
        RuleFor(x => x.Title).NotEmpty();
        RuleFor(x => x.Content).NotEmpty();        
    }
}
于 2011-02-06T09:36:33.313 に答える