我知道以下是不可能的,但有没有类似的方法来实现两个属性中的一个必须填写?换句话说,用户必须输入用户名或电子邮件。
public class LogOnModel
{
[Required(OrField=Email)]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required(OrField=UserName)]
[Display(Name = "Email")]
public string Email{ get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
答案 0 :(得分:3)
您可以编写custom model validation attribute,可选择使用客户端适配器来进行javascript验证,或者您可以在控制器代码中处理此问题:
public ActionResult LogOn(LogOnModel model)
{
if(string.IsNullOrWhitespace(model.UserName) &&
string.IsNullOrWhitespace(model.Email))
{
ModelState.AddModelError("Username", "Either a username or email must be provided.");
}
if(ModelState.IsValid) {...}
else {...}
}
在这种特殊情况下,更优雅的解决方案可能是接受Username
字段中的电子邮件或用户名,并智能地检测用户提供的电子邮件或用户名。