新手來MVC3和jQuery的不顯眼的驗證。我想爲我的mvc視圖模型屬性實現一個非常簡單的自定義字符串驗證。我知道有一個現有的「必需」屬性,但想要玩我的習慣用於測試目的。MVC3自定義字符串客戶端驗證不起作用
這裏是我的自定義驗證器類:
public class StringRequiredAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
string valueToValidate = value.ToString();
if ((value == null) || (valueToValidate.IsEmpty()))
{
return false;
}
return true;
}
public override string FormatErrorMessage(string name)
{
return "formatting my custom message here...";
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
ValidationType = "stringrequired"
};
yield return rule;
}
}
這裏是視圖模型類屬性聲明:
[Display(Name = "Custom Property")]
[StringRequired(ErrorMessage="My custom error message goes here")]
public string MyProperty { get; set; }
這裏是我的腳本:
jQuery.validator.unobtrusive.adapters.add('stringrequired', [], function (options) {
options.rules['stringrequired'] = true;
options.messages['stringrequired'] = options.message;
}
);
jQuery.validator.addMethod('stringrequired', function (value, element, params) {
//problem is this method is never fired
if (value == undefined || value == null)
return false;
if (value.toString().length == 0)
return false;
return true;
},'');
這是我的HTML標記:
<textarea cols="20" data-val="true" data-val-stringrequired="My custom message is
displayed here" id="MyProperty" name="MyProperty" rows="2">
</textarea>
我已經ClientValidationEnabled & UnobtrusiveJavaScriptEnabled在web.config中
出於某種原因,這是行不通的設置爲「真」。希望在這裏幫助。謝謝!
什麼是不工作?錯誤訊息?無事例外? – Jay
@Jay See'//問題是這個方法永遠不會被觸發' – AaronLS
嘗試使用'@ Html.TextAreaFor <>'來呈現標記,並確保您正在加載對jQuery不顯眼庫的引用。 – Jay