我为<div class="circle"></div>
写了一个自定义验证,如下所示:
Guid Type
当我在浏览器上检查元素时,我有这个:
public class ValidGuidAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
string msg = "please select a device";
ErrorMessage = msg;
var input = Convert.ToString(value);
if (string.IsNullOrEmpty(input) )
{
return false;
}
Guid guid;
if(!Guid.TryParse(input,out guid))
{
return false;
}
if (guid == Guid.Empty)
{
return false;
}
return true;
}
}
当我没有填写该档案并张贴表格时,我收到了此错误消息:
值&#39;请选择一个设备&#39;对设备组无效。
我想要得到这个:
请选择一个设备
和<span class="field-validation-valid" data-valmsg-for="DeviceGroupId" data-valmsg-replace="true"></span>
我有:
ViewModel
答案 0 :(得分:1)
自定义验证似乎与Guid
类型存在一些问题,当我将类型更改为字符串时,您当前的实现工作正常:
很奇怪,因为Guid
类型的有效性验证是自动执行的,因为当我删除自定义验证属性并检查有效性时,我得到了同样的错误:
答案 1 :(得分:1)
这是默认验证消息,我认为mvc在检查ValidGuid
之前正在验证并覆盖此消息,您可以尝试
public class ValidGuidAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
ErrorMessage = "please select a device";
var input = Convert.ToString(value);
if (string.IsNullOrEmpty(input))
{
return false;
}
Guid guid;
if (!Guid.TryParse(input, out guid))
{
return false;
}
if (guid == Guid.Empty)
{
return false;
}
return true;
}
public class ValidGuid : DataAnnotationsModelValidator<ValidGuidAttribute>
{
public ValidGuid(ModelMetadata metadata, ControllerContext context, ValidGuidAttribute attribute)
: base(metadata, context, attribute)
{
if (!attribute.IsValid(context.HttpContext.Request.Form[metadata.PropertyName]))
{
var propertyName = metadata.PropertyName;
if (context.Controller.ViewData.ModelState[propertyName] != null)
{
context.Controller.ViewData.ModelState[propertyName].Errors.Clear();
context.Controller.ViewData.ModelState[propertyName].Errors.Add(attribute.ErrorMessage);
}
}
}
}
}
并将此行添加到您的Global.asax.cs
文件
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(ValidGuidAttribute), typeof(ValidGuidAttribute.ValidGuid));