【问题标题】:One out of two fields required in validation验证所需的两个字段之一
【发布时间】:2013-04-10 16:29:21
【问题描述】:

我有 2 个字段:

名字

姓氏

并且只需要其中一项。但如果两者都被省略,我希望这两个字段都被突出显示。如果其中一个填写,则模型没问题,应该提交表单。

如何做到这一点?

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller


    【解决方案1】:

    所有复杂的验证都从继承自 IValidatableObject 的视图模型开始。然后您覆盖 Validate 并输入您自己的验证规则。

    IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
    {
        if (String.IsNullOrWhiteSpace(FirstName) && String.IsNullOrWhiteSpace(LastName))
        {
            yield return new ValidationResult("A name must be entered.", new string[] { "FirstName", "LastName" });
        }
    }
    

    请注意,这仅确保此规则的服务器端验证。如果你想要它在客户端,你需要编写自己的 JavaScript / jQuery 代码来处理验证。

    【讨论】:

    • 用这个标记字段无效,就像普通的验证属性一样?
    • 是的。 new string[] { "FirstName", "LastName" } 参数告诉调用代码哪个字段未通过验证。
    【解决方案2】:

    你可以使用this library,它会帮助你做这样的事情

    [RequiredIf("PropertyValidationDependsOn", true)]
       public string PropertyToValidate { get; set; }
    

    【讨论】:

    【解决方案3】:

    如果您愿意在客户端执行此操作 这可能会给你一个开始

    HTML

    <input type="text" class="name" id="firstName" />
    <input type="text" class="name" id="lastName" />
    <input type="button" id="btnSubmit" value="submit" />
    

    按钮点击事件

    $("#btnSubmit").click(function () {
        var isValid = false;
        $("input[class='name']").each(function (key, keyValue) {
            //alert(keyValue.value);
            if (keyValue.value.length > 0) {
                isValid = true;
                $(this).css("background", "White");
            }
            else {
                $(this).css("background", "RED");
            }
        })
        if (!isValid) {
            // do something 
        }
    });
    

    如果没有通过验证,防止表单提交

    $('input[type=submit]').bind('click', function(e) {
       var isValid = false;
            $("input[class='name']").each(function (key, keyValue) {
                //alert(keyValue.value);
                if (keyValue.value.length > 0) {
                    isValid = true;
                    $(this).css("background", "White");
                }
                else {
                    $(this).css("background", "RED");
                }
            })
            if (!isValid) {
               e.preventDefault() // prevents the form from being submitted
            }    
    });
    

    在http://jsfiddle.net/habo/UpmCv/测试它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-05
      • 2014-08-08
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2015-03-08
      • 1970-01-01
      相关资源
      最近更新 更多