3

これはうまくいきます

 [MetadataType(typeof(Area_Validation))]
 public partial class Area
 {
    ...
 }

 public class Area_Validation
 {
 [Required(ErrorMessage = "Please add this field.")] 
 public int Email { get; set; }

 [Required(ErrorMessage = "Please add this field")]
 public string Name { get; set; }
 }

しかし、動的に作成された場合Area_Validationはどうですか? たとえば、バックエンドでユーザーが作成できるサブスクリプション フィールドは、次のようになります。

代替テキスト

自動検証のために各フィールドにメタデータを設定するにはどうすればよいですか?

現在、私はやっています:

public class SubscriberFormViewModel
{
    public List<SubscriberFieldModel> Fields { get; private set; }
    public Calendar Calendar { get; private set; }
    public Company Company { get; private set; }

    public SubscriberFormViewModel()
    { 
        // TODO: This is only for testing while validation is not set
    }
    public SubscriberFormViewModel(Decimal calendarId)
    {
        if (calendarId > 0)
        {
            SubscribersRepository db = new SubscribersRepository();

            Calendar calendar = db.GetCalendarById(calendarId);
            Company company = db.GetCompanyById(calendar.company_id);

            this.Fields = db.FindAllSubscriberFieldsByCalendar(calendarId);
            this.Calendar = calendar;
            this.Company = company;
        }
        else
            this.Fields = new List<SubscriberFieldModel>();
    }
}

すべてのプロパティにメタデータを設定したいFields

言い換えれば、これFieldsはデータベースから入力され、いくつかのタイプを持つことができstringnumberdropdown、 など... MailChimpフィールドプロパティのようなものです:

代替テキスト

これをプログラムで行う方法はありますか、それとも jQuery プラグインを作成して検証し、MVC2 からの検証の使用を停止する必要がありますか?

ありがとうございました

4

2 に答える 2

1

実際には、タイプごとに 1 つ (または必要に応じてタイプごとに複数) の複数の検証シナリオを作成できます。次に、タイプの作成時にこの検証ルールを追加します。検証が必要な場合は、テンプレートの Validate メソッドを呼び出すことができます。これにより、これらのルールがチェックされ、そうでない場合は ModelState にエラーが追加され、フロント エンドで表示できるようになります。

実際には、属性を追加することはそれほど有益ではありません。属性の長所は、タイプをそれらで装飾できることです。動的なことを行っている場合は、検証を追加する動的な方法が必要です。

于 2010-10-13T08:28:39.713 に答える
0

データ注釈属性を使用してこれを行うことができるとは思いません。

Codeplex にはFluent Validationと呼ばれるプロジェクトがあり、 .Net コードを使用して流暢な方法で検証ルールを追加できます。私はそのプロジェクトを使用したことはありませんが、動的に作成されたオブジェクトであなたのケースに役立つかもしれません。

それが役に立てば幸い!

于 2010-10-11T13:06:31.097 に答える