3

次のことができないことはわかっていますが、2 つのプロパティのいずれかを入力する必要があることを達成する同様の方法はありますか? つまり、ユーザーは UserName または Email のいずれかを入力する必要があります。

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 に答える