c# - 如何实现模型以强制客户端至少填写 ASP.NET MVC 中的两个输入之一

标签 c# asp.net asp.net-mvc asp.net-mvc-3

这是我的模型:

public class PhoneNumber {

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

我如何强制客户端在创建操作中至少填写一个电话(Tel1 或 Tel2),我不想使用任何客户端脚本或 Controller 代码,我只是想在上面的模型中使用一些属性,例如 [需要]来实现这个目标?

最佳答案

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

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);
    }
}

关于c# - 如何实现模型以强制客户端至少填写 ASP.NET MVC 中的两个输入之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8193826/

相关文章:

c# - 错误 "Missing operand after ' 类农算子”—— 'Bannon' 算子是什么?

asp.net - SQL 存储过程中的 A-Z 循环

ASP.NET - 在全局资源文件中存储 SQL 查询?

asp.net - 理想的开发/测试/质量保证开发环境

C# 使用 SQLBulkCopy 或等效库高效地批量删除 50000 条记录

asp.net-mvc - 有什么理由为什么我的存储库方法不应该是静态的?

c# - 表是可为空的 DateTime,但 DataSet 抛出异常?

c# - 具有 LINQ 扩展方法的多个 WHERE 子句

c# - Uri.EscapeUriString 带方括号

c# - 在 asp.net MVC 中以英国格式将日期时间从 View 传递到 Controller