我有以下想法:
[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:验证错误(标签&#34; TESTE&#34;必须位于红叉的一侧)
答案 0 :(得分:0)
据我所知,您正在使用一些自定义验证属性(仅限服务器端验证)。所以你希望在客户端自动发生相同的验证(使用jquery验证)。
首先,您需要再添加一个 jquery.unobtrusive-ajax.js 的脚本。如果您希望在客户端上获得自定义验证属性的支持,请查看我在大约2年前制作的StackOverflow中的question。希望它有所帮助。
答案 1 :(得分:0)
谢谢大家的回复!
我在代码上实现的javascript函数中发现了错误:
$(document).ready(function () {
$('.field-validation-error').each(function () {
$(this).attr('title', $(this).html());
$(this).html("")
});
});
这个小虫子,这是我头痛的原因! 无论如何,谢谢你的帮助!