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

C# 如何实现一个模型来强制客户端至少填写ASP.NET MVC中两个输入中的一个,c#,asp.net,asp.net-mvc,asp.net-mvc-3,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; } } 如何强制create action中的客户端填写至少一个Tel Tel1或Tel2,我不想使用任何客户端脚本或控制器代码,我只想在上面的模型中使用一些属性,如[Required]要实现此目标?这类似于下面的问

这是我的模型:

public class PhoneNumber {

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

如何强制create action中的客户端填写至少一个Tel Tel1或Tel2,我不想使用任何客户端脚本或控制器代码,我只想在上面的模型中使用一些属性,如[Required]要实现此目标?

这类似于下面的问题,建议您创建自定义属性

然后,您的模型可以写成:

[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代码来验证客户端,但如果您只想使用服务器端验证,这是可选的。

这类似于下面的问题,建议您创建自定义属性

然后,您的模型可以写成:

[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验证是否支持这种验证

以下是一篇示例自定义验证创建分步博客文章:


没有烘焙验证属性,但很容易编写自己的属性。我不知道你说的没有客户端代码是什么意思,但是如果没有客户端代码,就不可能进行这种客户端验证。我不确定HTML5验证是否支持这种验证

以下是一篇示例自定义验证创建分步博客文章:


只需更改模型并使用如下自定义验证器:

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

只需更改模型并使用如下自定义验证器:

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

你为什么不强迫他们填写Tel1而不是2中的至少一个?为了达到同样的目标,逻辑更简单。@BenRobinson这不是你所看到的要求。当然,需要的是收集至少一个电话号码。你为什么不强迫他们填写Tel1而不是2中的至少一个?逻辑更简单为了达到同样的目标。@BenRobinson正如你所见,这并不是必须的。当然,必须至少收集一个电话号码