3

我知道以下是不可能的,但是有没有类似的方法来实现必须填写两个属性之一?换句话说,用户必须输入用户名或电子邮件。

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

1 回答 1

3

您可以编写自定义模型验证属性,可选择使用客户端适配器来使 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,并智能地检测用户提供的用户名。

于 2013-07-11T15:31:19.120 回答