次のようなモデルがあります。
public class TimeAdjustData
{
[IntegerAllowPlus]
public int? AddStart { get; set; }
[IntegerAllowPlus]
public int? AddEnd { get; set; }
public TimeSpan? GivenStart { get; set; }
public TimeSpan? GivenEnd { get; set; }
}
ここでの私の目標は、ユーザーが正の値にプラスを追加できる整数を入力できるようにすることです。たとえば、20、-20、または +20 を入力できる必要があります。20 と +20 は論理的に同じになります。
カスタム検証属性を作成し、クライアントにカスタム クライアント検証ルールを追加しました。
jQuery.validator.addMethod("integerplus", function (value, element, param) {
if (value[0] === '+') { value = value.substr(1, value.length - 1); }
return isInteger(value);
});
jQuery.validator.unobtrusive.adapters.addBool("integerplus");
isInteger は、もちろん整数を検証する独自の関数です。
ここでの問題は、MVC が の属性を正しくレンダリングしdata-val-integerplus
ても、 の属性もレンダリングすることですdata-val-number
。
これは、AddStart と AddEnd のデータ型が null 許容整数であるためだと思います。ただし、これにより、入力値がカスタム検証に合格しても、組み込みの数値クライアント検証に合格しないという効果が生じます。したがって、どうにかして属性の作成を避ける必要がありますdata-val-number
。どうやってやるの?