【发布时间】:2013-06-16 14:01:48
【问题描述】:
MVC3 和 jquery 不显眼的验证新手。我正在尝试为我的 mvc 视图模型属性实现一个非常简单的自定义字符串验证。我知道有一个现有的“必需”属性,但想使用我的自定义进行测试。
这是我的自定义验证器类:
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>
我在 web.config 中将 ClientValidationEnabled 和 UnobtrusiveJavaScriptEnabled 设置为“true”
由于某种原因,这不起作用。非常感谢这里的帮助。谢谢!
【问题讨论】:
-
究竟是什么不起作用?错误信息?未处理的异常?
-
@Jay See
//problem is this method is never fired -
尝试使用
@Html.TextAreaFor<>渲染标签,并确保您正在加载对 jQuery 非侵入式库的引用。 -
是的,该属性按照 jay 的建议呈现,并引用了所有必要的库。我不确定为什么没有触发客户端方法。
-
您是否测试过其他通用验证属性以查看它们是否正在触发?记住它必须在一个表单中,并且 MVC 必须能够检测到这个表单
标签: jquery asp.net-mvc-3 unobtrusive-validation