C# 验证中需要两个字段中的一个

C# 验证中需要两个字段中的一个,c#,asp.net-mvc,model-view-controller,C#,Asp.net Mvc,Model View Controller,我有两个字段: 名字 姓氏 而且只需要其中一个。但如果两个字段都被省略,我希望两个字段都高亮显示。如果其中一个已经填写,那么模型就可以了,表格应该提交 如何做到这一点?您可以使用,它将帮助您完成类似的操作 [RequiredIf("PropertyValidationDependsOn", true)] public string PropertyToValidate { get; set; } 所有复杂验证都从继承自IValidatableObject的视图模型开始。然后重写验证,并输

我有两个字段:

名字

姓氏

而且只需要其中一个。但如果两个字段都被省略,我希望两个字段都高亮显示。如果其中一个已经填写,那么模型就可以了,表格应该提交

如何做到这一点?

您可以使用,它将帮助您完成类似的操作

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

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

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" });
    }
}
IEnumerable IValidatableObject.Validate(ValidationContext ValidationContext)
{
if(String.IsNullOrWhiteSpace(FirstName)&&String.IsNullOrWhiteSpace(LastName))
{
返回新的ValidationResult(“必须输入名称。”,新字符串[]{“FirstName”,“LastName”});
}
}

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

如果您愿意在客户端进行验证 这可能会给你一个开始

HTML

防止表单在未通过验证时提交

$('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
        }    
});

如果您编写自己的验证属性(相对简单),则可以在

处进行测试。类似于上面的内容,或万无一失的验证或流畅的验证都可以满足这种开箱即用的要求。使用此标记,字段将以与正常验证属性相同的方式无效?是。
新字符串[]{“FirstName”,“LastName”}
参数告诉调用代码哪些字段未通过验证。
$("#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
        }    
});