using System; using System.Collections.Generic; using System.Linq; using System.Web.UI.WebControls; using Microsoft.AspNet.Membership.OpenAuth; namespace CLOUDWEB.Account { public partial class Manage : System.Web.UI.Page { protected string SuccessMessage { get; private set; } protected bool CanRemoveExternalLogins { get; private set; } protected void Page_Load() { if (!IsPostBack) { // 确定要呈现的节 var hasLocalPassword = OpenAuth.HasLocalPassword(User.Identity.Name); setPassword.Visible = !hasLocalPassword; changePassword.Visible = hasLocalPassword; CanRemoveExternalLogins = hasLocalPassword; // 呈现成功消息 var message = Request.QueryString["m"]; if (message != null) { // 从操作中去除查询字符串 Form.Action = ResolveUrl("~/Account/Manage"); SuccessMessage = message == "ChangePwdSuccess" ? "已更改你的密码。" : message == "SetPwdSuccess" ? "已设置你的密码。" : message == "RemoveLoginSuccess" ? "已删除外部登录。" : String.Empty; successMessage.Visible = !String.IsNullOrEmpty(SuccessMessage); } } // 对外部帐户列表进行数据绑定 var accounts = OpenAuth.GetAccountsForUser(User.Identity.Name); CanRemoveExternalLogins = CanRemoveExternalLogins || accounts.Count() > 1; externalLoginsList.DataSource = accounts; externalLoginsList.DataBind(); } protected void setPassword_Click(object sender, EventArgs e) { if (IsValid) { var result = OpenAuth.AddLocalPassword(User.Identity.Name, password.Text); if (result.IsSuccessful) { Response.Redirect("~/Account/Manage?m=SetPwdSuccess"); } else { newPasswordMessage.Text = result.ErrorMessage; } } } protected void externalLoginsList_ItemDeleting(object sender, ListViewDeleteEventArgs e) { var providerName = (string)e.Keys["ProviderName"]; var providerUserId = (string)e.Keys["ProviderUserId"]; var m = OpenAuth.DeleteAccount(User.Identity.Name, providerName, providerUserId) ? "?m=RemoveLoginSuccess" : String.Empty; Response.Redirect("~/Account/Manage" + m); } protected T Item() where T : class { return GetDataItem() as T ?? default(T); } protected static string ConvertToDisplayDateTime(DateTime? utcDateTime) { // 你可以更改此方法,以便将 UTC 日期时间转换为所需的显示 // 偏移值和格式。正在使用当前线程区域设置将它转换成服务器时区,并将其设置为 // 短日期和长时间字符串的格式。 return utcDateTime.HasValue ? utcDateTime.Value.ToLocalTime().ToString("G") : "[从不]"; } } }