3

私のプロジェクトでは、ユーザーが金額 (ポンドとペンス) を 10 進数で指定する必要があり、データベース用に変換できるように Int32 の範囲内にある必要がある場合がいくつかあります。私はこれを行うことが可能であると仮定しました:

/// <summary>
/// Range attribute to ensure that entered value can be converted to an int32
/// </summary>
public class PoundsAndPenceAttribute : RangeAttribute
{
    public PoundsAndPenceAttribute(double minimum = (double)int.MinValue / 100, double maximum = (double)int.MaxValue / 100)
        : base(minimum, maximum)
    {
    }
}

残念ながら、クライアント側の JavaScript data-val range 属性は生成されませんが、サーバー側では検証されます。これを行うためのより良い方法はありますか、それともカスタムバリデータを作成する必要がありますか?

4

1 に答える 1

4

IClientValidatable インターフェイスを実装してみてください:

public class PoundsAndPenceeAttribute : RangeAttribute, IClientValidatable
{
    public LocalizeRange(double minimum = (double)int.MinValue / 100, double maximum = (double)int.MaxValue / 100) 
: base(minimum, maximum)
    {
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = ErrorMessage,
            ValidationType = "range"
        };

        rule.ValidationParameters.Add("min", Minimum);
        rule.ValidationParameters.Add("max", Maximum);

        yield return rule;
    }
}

それは仕事をするべきです。

于 2012-11-13T14:37:44.710 に答える