跨度标题的验证消息 - MVC

时间:2015-09-21 18:40:37

标签: asp.net-mvc validation model-view-controller

我有以下想法:

    [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;必须位于红叉的一侧)

2 个答案:

答案 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("")
        });
    });

这个小虫子,这是我头痛的原因! 无论如何,谢谢你的帮助!