構成ファイルから文字列の長さの値を読み取るカスタム属性を作成しました。ajax get を使用してロードされる部分ビューで使用しています。
カスタム属性のコードは次のとおりです。
public class ConfigMaxLengthAttribute : StringLengthAttribute,IClientValidatable
{
private readonly int _maxLength;
public ConfigMaxLengthAttribute(string key)
: base(int.Parse(ConfigurationManager.AppSettings[key]))
{
_maxLength = int.Parse(ConfigurationManager.AppSettings[key]);
}
public override bool IsValid(object value)
{
var strValue = value as string;
if (!string.IsNullOrEmpty(strValue))
{
var len = strValue.Length;
return len <= _maxLength;
}
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = "Custom Error Message",
ValidationType = "stringmaxlength"
};
}
}
JS ファイルには、次のコードを含めました。
/// <reference path="jquery-1.7.2.js" />
/// <reference path="jquery.validate.js" />
/// <reference path="jquery.validate.unobtrusive.js" />
jQuery.validator.addMethod('greaterThan', function (value, element, params) {
return value.length>200;
}, '');
jQuery.validator.unobtrusive.adapters.add('stringmaxlength', {}, function (options) {
options.rules['greaterThan'] = true;
options.messages['greaterThan'] = options.messages;
});
これにより、html のフィールドに対して次のマークアップが生成されます。
<textarea cols="28" data-val="true" data-val-stringmaxlength="Notes entered cannot be more than 200 characters." id="UserNote" name="UserNote" rows="2" >
</textarea>
この JS ファイルをビューに含めました。私のweb.configファイルでは、クライアント側の検証が有効になっています..
このカスタム属性を除いて、データ注釈を使用したすべてのクライアント側の検証が機能しています..
先に進む方法がわかりません。助けてください...