【发布时间】:2015-09-21 18:40:36
【问题描述】:
我的情况如下:
[Required(ErrorMessage = "Campo obrigatório!")]
[MaxLength(10, ErrorMessage = "Tamanho excedido!")]
[CustomDataAnnnotations.EhTelefoneViciado(ErrorMessage="Teste de validacao")]
public string NumeroTelefone1 { get; set; }
[CustomDataAnnnotations.ValidarDataAtual(ErrorMessage = "Data futura!")]
[Required(ErrorMessage = "Campo obrigatório!")]
[Display(Name = "Data Ocorrido *")]
public string DataOcorridos { get; set; }
这样,生成以下 HTML:
<span class="field-validation-error erro" data-valmsg-for="NumeroTelefone1" data-valmsg-replace="true" title="Teste de validacao"></span>
<span class="field-validation-error erro" data-valmsg-for="DataOcorridos" data-valmsg-replace="true">Data futura!</span>
为什么在第一种情况下消息在 SPAN 的 TITLE 中,而在第二种情况下在 SPAN 中? 我必须做什么,才能像第二个那样生成?
我已经引用了 .js:
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/Scripts/jquery.validate.js")
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.js")
@{Html.EnableClientValidation(true);}
@{Html.EnableUnobtrusiveJavaScript(true);}
请帮帮我。
编辑:下面是 CustomDataAnnotation:
public class CustomDataAnnnotations
{
public class ValidarDataAtualAttribute : ValidationAttribute
{
public ValidarDataAtualAttribute()
{
}
public override bool IsValid(object value)
{
//var dt = (DateTime)value;
var dt = DateTime.Parse(value.ToString());
if (dt <= DateTime.Now)
{
return true;
}
return false;
}
}
public class EhTelefoneViciadoAttribute : ValidationAttribute
{
public EhTelefoneViciadoAttribute()
{
}
public override bool IsValid(object value)
{
if (value == null) { return true; }
var numeroTelefone = value.ToString();
if (numeroTelefone.Length >= 8)
{
numeroTelefone = numeroTelefone.PadRight(8);
String[] telefonesViciados = { "00000000", "11111111", "22222222", "33333333", "44444444", "55555555", "66666666", "77777777", "88888888", "99999999", "21212121", "10101010", "12121212", "23232323", "65656565", "45454545", "56565656", "78787878", "89898989" };
if (telefonesViciados.Contains(numeroTelefone))
{
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
}
}
EDIT02:HTML:
@Html.EditorFor(model => model.NumeroTelefone1, new { htmlAttributes = new { @class = "border-corner", @onkeydown = "return ValidateNumber(event);" } })
@Html.ValidationMessageFor(model => model.NumeroTelefone1, "", new { @class = "erro" }
EDIT03:验证错误(标签“TESTE”必须在红十字的一侧)
【问题讨论】:
-
假设您在视图中使用 HTML 助手,您调用的确切代码是什么?你是如何渲染你的模型的?
-
@Jason ,使用信息编辑...
-
@Brazao 显示您在视图中实际调用 HTML 帮助程序的位置。您的验证属性似乎没问题。
-
@JB06 使用信息进行编辑,我认为问题是不引人注目的,这个属性在不同的视图中,但是两个视图都有相同的声明,我错过了什么吗?
-
@Brazao 尝试将 null 而不是空字符串传递给 ValidationMessageFor 助手的第二个参数
标签: asp.net-mvc validation model-view-controller