如果另一个输入字段为空,如何使用不显眼的验证来生成输入字段必填字段?

时间:2016-11-14 00:32:14

标签: c# asp.net-mvc jquery-validate unobtrusive-validation

我有一个带有三个不同文本框的简单表单,可以在返回结果集之前输入搜索条件。在这三个字段中,如果另一个字段为空,我希望有条件地生成两个字段。

在附带的屏幕截图中,如果没有输入"标题"则无法提交搜索表单。或"表演者"领域。如果两个字段都有值,则可以。我想通过制作" Title"来实现这一目标。当表演者"表演者"是空的。但是我的代码不起作用。我在服务器端进行了必要的验证。我正在寻找客户端解决方案。

enter image description here

HTML源代码:

$(function() {
    if ($.validator && $.validator.unobtrusive) {

        $.validator.addMethod("requiredif", function (value, element, params) {
            return !(value.length === 0 && $(params).val().length === 0);
        });

        $.validator.unobtrusive.adapters.add("requiredif", ["otherpropertyname"], function (options) {
            options.rules["requiredif"] = "#" + options.params.otherpropertyname;
            options.messages["requiredif"] = options.message;
        });
    }

    $("#searchWork").click(function() {

        if ($("#searchWorkForm").valid()) {
            // Make an Ajax Call and get the search result
        }
    });
}

客户端验证码:

{{1}}

1 个答案:

答案 0 :(得分:0)

首先需要将$.validator.addMethod()$.validator.unobtrusive.adapters.add()函数移到$(function() { .. }

之外

但根据您要验证的内容的说明,您的$.validator.addMethod()方法中的代码应首先检查其他属性' (searchWorkPerformer)有一个值,如果有,则返回true。如果没有,则检查searchWorkTitle是否有值。如果有,则返回true,否则返回无效,返回false

// scripts for jquery, jquery.validate and jquery.validate.unobtrusive
<script>
    $.validator.addMethod("requiredif", function (value, element, params) {
        if ($(params).val().length === 0) {
            return true;
        } elseif (value.length === 0) {
            return false;
        }
        return true;
    });
    $.validator.unobtrusive.adapters.add("requiredif", ["otherpropertyname"], function (options) {
        options.rules["requiredif"] = "#" + options.params.otherpropertyname;
        options.messages["requiredif"] = options.message;
    });

    $(function() {
        $("#searchWork").click(function() {
            if ($("#searchWorkForm").valid()) {
                // Make an Ajax Call and get the search result
            }
        });
    }
</script>

旁注:requiredif并未真正描述您的验证 - 或许requiredifempty更合适,因为如果其他属性为空,您只需要一个值。