2011-01-14 86 views

回答

0

解决方案与使用名称字段作为电子邮件地址一样简单吗?

+0

是的,我没想到的是评论,但我想用用户保持name属性在网站上显示他们的名字,例如“欢迎用户名”,而不是“欢迎使用[email protected]”。 – 2011-01-14 17:12:19

1

如果您使用的是默认AccountModels你不妨改变LogOnModel删除UserName并添加Email,像这样:

public class LogOnModel { 
    [Required] 
    [DataType(DataType.EmailAddress)] 
    [Display(Name = "Email address")] 
    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; } 
} 

UserName变化发生于EmailLogOn视图中。

最后,在你的AccountController,改变LogOn行动,从电子邮件地址获取用户名,完成SignIn过程中,像这样:

[HttpPost] 
public ActionResult LogOn(LogOnModel model, string returnUrl) { 
    if (ModelState.IsValid) { 
    var userName = Membership.GetUserNameByEmail(model.Email); 
    if (MembershipService.ValidateUser(userName, model.Password)) { 
     FormsService.SignIn(userName, model.RememberMe); 
     if (Url.IsLocalUrl(returnUrl)) { 
     return Redirect(returnUrl); 
     } else { 
     return RedirectToAction("Index", "Home"); 
     } 
    } else { 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
    } 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 
1

我们有相同的要求,为此, 您应该创建自定义身份(CustomIdentity:IIdentity,ISerializable)

[Serializable] 
public class CustomIdentity : IIdentity, ISerializable 

并为其定义Name属性。

然后为用户名返还财产的电子邮件get方法

public string Name 
    { 
     get{ return Email; } 
    } 

如果需要详细的,请对这个职位

相关问题