本文介绍了ASP.NET MVC3:ValidationType ModelClientValidationRule的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我刚刚创建了一个示例应用程序MVC3学验证。它使用DataAnnotations。我已经创建了一个名为CustomStartLetterMatch一个自定义ValidationAttribute 。这是落实System.Web.Mvc.IClientValidatable。我有相应的客户端code用不显眼的jQuery写的。这是工作正常。
关于自定义验证:它的第一个名字输入姓氏输入进行比较。它会引发错误,如果他们两个人的第一个字符是不一样的。
正如我所说的,应用程序工作正常。但是,当我看着 rule.ValidationType =greaterdate;
我糊涂了。我想将其更改为其他像anotherDefaultType的东西。当我改变它,它失败使用jQuery错误。
- 是什么原因呢?
- 什么是可用的ValidationTypes?
- 什么是建议的方法来改变ValidationType在这个scenari
code:
使用系统;
使用System.ComponentModel.DataAnnotations;
使用System.Collections.Generic;
命名空间MyValidationTEST
{
公共类Person
{
[(所需的名字的ErrorMessage =)必填]
公共字符串名字{获得;组; } [CustomStartLetterMatch(名字)]
[StringLength(5,的ErrorMessage =必须在5个字符)]
公共字符串名字{获得;组; } [范围(18,50,的ErrorMessage =必须在18和50之间)]
公众诠释年龄{搞定;组; }}公共密封类CustomStartLetterMatch:ValidationAttribute,System.Web.Mvc.IClientValidatable
{ 私人常量字符串_defaultErrorMessage =的第一个字母{0}必须是同为{1}第一letetr
私人字符串_basePropertyName; 公共CustomStartLetterMatch(字符串basePropertyName)
:基地(_defaultErrorMessage)
{
_basePropertyName = basePropertyName;
}
//覆盖FormatErrorMessage方法
公众覆盖字符串FormatErrorMessage(字符串名称)
{
返回的String.Format(_defaultErrorMessage,姓名,_basePropertyName);
}
//覆盖的IsValid
保护覆盖的ValidationResult的IsValid(对象的值,System.ComponentModel.DataAnnotations.ValidationContext validationContext)
{
//获取PropertyInfo对象
VAR basePropertyInfo = validationContext.ObjectType.GetProperty(_basePropertyName);
VAR baseValue =(字符串)basePropertyInfo.GetValue(validationContext.ObjectInstance,NULL);
VAR CurrentValue的=(字符串)值;
串firstLetterBaseValue = baseValue.Substring(0,1);
串firstLetterCurrentValue = currentValue.Substring(0,1); //比较
如果(!string.Equals(firstLetterBaseValue,firstLetterCurrentValue))
{
VAR消息= FormatErrorMessage(validationContext.DisplayName);
返回新的ValidationResult(消息);
} //默认的回报 - 这意味着没有验证错误
返回null;
}
公共IEnumerable的< System.Web.Mvc.ModelClientValidationRule> GetClientValidationRules(System.Web.Mvc.ModelMetadata元,System.Web.Mvc.ControllerContext上下文)
{
VAR规则=新System.Web.Mvc.ModelClientValidationRule();
rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
rule.ValidationParameters.Add(其他,_basePropertyName);
rule.ValidationType =greaterdate;
产生回报规则;
}}
}
查看
@model MyValidationTEST.Person@ {
ViewBag.Title =创建;
}< H2>创建< / H><脚本的src =@ Url.Content(〜/脚本/ jQuery的-1.5.1.min.js)TYPE =文/ JavaScript的> < / SCRIPT>@ *不显眼* @
<脚本的src =@ Url.Content(〜/脚本/ jquery.validate.min.js)TYPE =文/ JavaScript的>< / SCRIPT>
<脚本的src =@ Url.Content(〜/脚本/ jquery.validate.unobtrusive.min.js)TYPE =文/ JavaScript的>< / SCRIPT><脚本类型=文/ JavaScript的>/ *注册适配器 - addSingleVal * /
jQuery.validator.unobtrusive.adapters.addSingleVal(greaterdate,其他);
/ *在不显眼的客户端验证规则验证类型名称只能由小写字母的* // * Add方法* /
jQuery.validator.addMethod(greaterdate
功能(VAL,元素,其他)
{ VAR模型$ P $ PFIX = element.name.substr(0,element.name.lastIndexOf(。)+ 1)
VAR otherVal = $([NAME =+模式preFIX +其他+])VAL()。 如果(VAL&安培;&安培; otherVal)
{
变种lastNameFirstLetter = val.substr(0,1);
变种firstNameFirstLetter = otherVal.substr(0,1); 如果(lastNameFirstLetter!= firstNameFirstLetter)
{
返回false;
}
}
返回true;
});
< / SCRIPT>
@using(Html.BeginForm()){
@ Html.ValidationSummary(真)
<&字段集GT;
<传奇>与人LT; /传说> < DIV CLASS =编辑标记>
@ Html.LabelFor(型号=> model.FirstName)
< / DIV>
< DIV CLASS =主编场>
@ Html.EditorFor(型号=> model.FirstName)
@ Html.ValidationMessageFor(型号=> model.FirstName)
< / DIV> < DIV CLASS =编辑标记>
@ Html.LabelFor(型号=> model.LastName)
< / DIV>
< DIV CLASS =主编场>
@ Html.EditorFor(型号=> model.LastName)
@ Html.ValidationMessageFor(型号=> model.LastName)
< / DIV> < DIV CLASS =编辑标记>
@ Html.LabelFor(型号=> model.Age)
< / DIV>
< DIV CLASS =主编场>
@ Html.EditorFor(型号=> model.Age)
@ Html.ValidationMessageFor(型号=> model.Age)
< / DIV> &所述p为H.;
<输入类型=提交值=创建/>
&所述; / P>
< /字段集>
}< DIV>
@ Html.ActionLink(返回目录,索引)
< / DIV>
控制器:
使用System.Web.Mvc;
命名空间MyValidationTEST.Controllers
{
公共类RelativesController:控制器
{ // GET:/亲属/
公众的ActionResult指数()
{
返回查看();
} // GET:/亲属/创建
公众的ActionResult的Create()
{
人人=新的Person();
返回查看(人);
}
// POST:/亲属/创建
[HttpPost]
公众的ActionResult创建(人relativeToAdd)
{
如果(ModelState.IsValid)
{
返回RedirectToAction(「指数」);
}
返回查看(relativeToAdd);
} } }
阅读:
ASP.NET MVC3 - 自定义验证属性 - >客户端断
解决方案
You can use only lowercase letters for the ValidationType property:
rule.ValidationType = "anotherdefaulttype";
and then adapt your client script to reflect this modification:
jQuery.validator.unobtrusive.adapters.addSingleVal("anotherdefaulttype", "other");
jQuery.validator.addMethod("anotherdefaulttype", function (val, element, other) {
...
});
这篇关于ASP.NET MVC3:ValidationType ModelClientValidationRule的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!