1

私は約90の異なる形式の複雑なアプリケーションを開発しています(ええ、素晴らしいです)。いくつかの要件に基づいて複雑なフィールド検証を行うにはどうすればよいですか。

1)フィールド要件は、ログインしているユーザーに基づいています(役割)2)他のデータフィールドの回答が異なる場合、フィールド要件は変更されます(動的)

これは、EF5 POCOを使用するMVC4でどのように達成されますか?

私は現在、次のような必須フィールドのデータ注釈を作成しました。

私のEF5POCOモデル

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

[MetadataType(typeof(User_Validation))]
public partial class User
{    
    public int UserID { get; set; }
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
}

私のEF5POCOにあるValidationModels.csファイル

    public class User_Validation
    {    
        public int UserID { get; set; }

        [Required(ErrorMessage = "The UserName is required")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "The FirstName is required")]
        public string FirstName { get; set; }

        [Required(ErrorMessage = "The LastName is required")]
        [Display(Name="Last Name")]
        public string LastName { get; set; }

        [Required(ErrorMessage = "The Password is required")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Required(ErrorMessage = "The Email is required")]
        [DataType(DataType.EmailAddress)]
        public string Email { get; set; }
    }

これは問題なく機能しますが、検証を動的にするにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

管理者が応答の動的要件を設定する必要がありますか?それとも最初からかなり静的ですか?

私があなたなら、トリガーされた応答ごとに異なるアクション メソッドを作成します。これにより、フォームを部分ビューとして指定し、入力ロジックに基づいてレンダリングできます。

カスタム フィールド検証が必要な場合は、独自のデータ検証フレームワークを作成することをお勧めします。各アクション要求/応答サイクルの前後にカスタム検証を追加できる ActionFilterAttribute から継承できます。詳細については、ここを参照してくださいMVC のカスタム フィルター

さらに、同じフォームに対して複数のポストバックが発生しないように、クライアント側の検証用にカスタム jquery 検証フレームワークを導入し、次のフォームを動的に生成する前にサーバー側の検証をカスタマイズします。フレームワークの詳細については、このブログを参照してください: Jquery - Custom Validation

データストアとビューの間で多くのチャットをしたくないので、よく考えられたキャッシュ実装にできるだけ多くの構成を保存することに注意してください。

これが役立つことを願っています。

于 2013-01-14T16:17:04.890 に答える