2

多分それは私の心の働き方なのかもしれませんが、目立たないカスタムバリデーターをどのように行うべきかを理解するのに非常に苦労しています。C# の部分は十分に簡単ですが、jqueryui アダプターは私が迷っているところです。

私は、日付が過去の特定の時間である必要があるバリデーターを作成しようとしています。これを年齢検証に使用して、誰かが 18 年前の日付を入力したことを確認します。

私は最終的に、それをリモートバリデーターにすることにしました。そのため、検証ではクライアント側とサーバー側の両方で同じコードが使用されます。それでも、私はこれを機能させるために jquery に興味があります。

Data Annotation Extensions に日付関数があればいいのに。

4

1 に答える 1

2

カスタム バリデータの作成など、asp.net mvc を使用した目立たない検証に関する多くの情報が、Brad Wilson のブログ記事に記載されています。

次の html に基づく (TextBox ヘルパーの出力である必要があります)

    <input type="text" name="Age"
        data-val="true" 
        data-val-required="This field is required" 
        data-val-minage="You should be 18 years or older, go get your parents!" 
        data-val-minage-value="18" />
    <input type="submit"/>

次の JavaScript を追加して、クライアント側で検証することができます。

    // Extend date with age calculator
    Date.prototype.age = function (at) {
        var value = new Date(this.getTime());
        var age = at.getFullYear() - value.getFullYear();
        value = value.setFullYear(at.getFullYear());
        if (at < value) --age;
        return age;
    };

    // Add adapter for minimum age validator. Wrap in closure
    (function ($) {
        $.validator.unobtrusive.adapters.addSingleVal("minage", "value");
    } (jQuery));

    // Add client side minimum age validator
    $.validator.methods.minage = function (value, element, params) {

        // If no value is specified, don't validate
        if (value.length == 0) {
            return true;
        }

        var dob = new Date(Date.parse(value));

        if (dob.age(new Date()) < params || dob == 'Invalid Date') {
            return false;
        }

        return true;
    };

年齢計算機のクレジットはDaveによるものです

ここで欠けているのはグローバリゼーションですが、それは質問の範囲外だと思いました。ところで、 jquery Globalize プラグインを使用して実装するのは非常に簡単です

お役に立てれば

于 2011-08-27T12:52:10.343 に答える