【问题标题】:Only highlight required fields without showing an error message仅突出显示必填字段而不显示错误消息
【发布时间】:2014-09-25 19:08:02
【问题描述】:

我的模型中有这个属性:

[Required]
[StringLength(40,ErrorMessage = "First Name must not be more than 40 characters.")]
public string FirstName { get; set; }

和我的视图代码:

@Html.ValidationSummary()
@Html.TextBoxFor(m => m.FirstName)

如果用户没有为该字段输入值,我希望突出显示文本框,但不希望显示错误消息。我需要仍然显示其他验证的错误消息。

如果我保留代码原样,则会显示默认错误消息

FirstName 字段是必需的。

如果我将 required 属性更改为 [Required(ErrorMessage = null)] 我会收到一个错误:

必须设置 ErrorMessageString 或 ErrorMessageResourceName,但 不是两者都有。

如何在不显示错误消息的情况下突出显示文本框,同时仍然允许其他验证的错误消息?

【问题讨论】:

  • 如果您想同时保留 [必需] 和 [您的亮点内容],我想有两种方法可以实现。首先,是创建一个新属性(自定义属性)并将其添加到字段中。二是使用Jquery,简单快捷。此外,只需一两行代码即可处理所有字段。
  • 为什么不直接做错误信息和空字符串?
  • 我也是这么想的。你得到的错误是因为Required 不接受null 这些参数,但它会接受一个空字符串,因为它仍然是一个字符串。至少应该有效地显示错误消息已被删除,因为它将显示空字符串。
  • 如果你设置 ErrorMessage = "" 你会得到同样的错误

标签: c# asp.net-mvc validation


【解决方案1】:

我认为这应该可行。

    [Required(ErrorMessage = " ")]
    [StringLength(40, ErrorMessage = "First Name must not be more than 40 characters.")]
    public string FirstName { get; set; }

【讨论】:

    【解决方案2】:

    我不知道入侵验证过程的可靠方法,但您可以像这样入侵表单提交过程(我想不到并且未经测试):

    $("#theForm").submit(function () {
        $('.validation-summary-errors').hide();
        if (!$(this).valid()) {
            $('.validation-summary-errors>ul>li').filter(function(){
                return (/The FirstName field is required/i).test($(this).text())
            }).hide();
        }
        $('.validation-summary-errors').show();
    });
    

    概念是:如果表单无效,如果验证摘要中出现“FirstName field is required”,则将其隐藏。首先隐藏整个块来防止它闪烁。

    【讨论】:

      猜你喜欢
      • 2012-05-11
      • 2012-12-18
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多