如何实现一个模型来强制客户端在ASP中填写至少两个输入中的一个.净MVC

本文关键字:一个 输入 MVC 两个 客户端 模型 实现 何实现 ASP | 更新日期: 2023-09-27 18:15:14

这是我的模型:

public class PhoneNumber {
    public long Id { get; set; }
    public string Tel1 { get; set; }
    public string Tel2 { get; set; }
}

我怎么能强迫客户端在创建动作填写至少一个电话(Tel1或Tel2),我不想使用任何客户端脚本,或控制器代码,我只是有兴趣使用一些属性在上面的模型,如[Required]来实现这一目标?

如何实现一个模型来强制客户端在ASP中填写至少两个输入中的一个.净MVC

就像这样更改模型并使用自定义验证器:

public class PhoneNumber : IValidatableObject {
    public long Id { get; set; }
    public string Tel1 { get; set; }
    public string Tel2 { get; set; }

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{
        var field1 = new[] { "Tel1" };
        var field2 = new[] { "Tel2" };
        if (string.IsNullOrEmpty(Tel1))
            if (String.IsNullOrEmpty(Tel2))
yield return new ValidationResult("At least Fill one of Tel1 or Tel2‏", field1);
        if (string.IsNullOrEmpty(Tel2))
        if (String.IsNullOrEmpty(Tel1))
yield return new ValidationResult("At least Fill one of Tel1 or Tel2", field2);
    }
}

这与下面的问题类似,这里建议您创建一个自定义属性。

你的模型可以写成:

[AtLeastOneRequired("Tel1", "Tel2", ErrorMessage="Please enter at least one value.")]
public class PhoneNumber { 
    public long Id { get; set; } 
    public string Tel1 { get; set; } 
    public string Tel2 { get; set; } 
} 

描述确实描述了编写javascript代码来验证客户端,但如果你只想使用服务器端验证,这是可选的

没有内置的验证属性,但是很容易编写自己的验证属性。我不知道你说的没有客户端代码是什么意思,但是没有任何客户端代码是不可能做这种客户端验证的(不确定HTML5验证是否支持这种验证)。

这里是一个示例,自定义验证创建一步一步的博客文章:

ASP。. NET MVC:小于和大于验证属性