【问题标题】:Validation message on span title - MVC跨度标题上的验证消息 - MVC
【发布时间】: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


【解决方案1】:

据我了解,您正在使用一些自定义验证属性(仅限服务器端验证)。因此,您希望在客户端自动进行相同的验证(使用 jquery validate)。

首先,您需要再添加一个脚本,即 jquery.unobtrusive-ajax.js。如果您希望客户端支持您的自定义验证属性,请查看我大约 2 年前在 StackOverflow 中制作的 question。希望对您有所帮助。

【讨论】:

  • 感谢您的回复,让我烦恼的是什么,我已经在另一个视图上进行了自定义验证,并且效果很好!即使我使用相同的自定义验证,错误仍然存​​在...
  • @Brazao 不幸的是,我想不出其他可以帮助您的方法。对不起。
【解决方案2】:

谢谢大家的回复!

我在代码上实现的 javascript 函数上发现了错误:

 $(document).ready(function () {
      $('.field-validation-error').each(function () {
           $(this).attr('title', $(this).html());
            $(this).html("")
        });
    });

这个小虫子,让我头疼! 无论如何,感谢您的帮助!

【讨论】:

  • 你应该删除这个问题。它对任何人都没有用。
猜你喜欢
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 2012-06-03
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多