我想在异步方法完成时显示警告。
这是我到目前为止所做的:
private async void SetPassword()
{
var provider = new DpapiDataProtectionProvider("RDSupport");
string userId = Support.Instance.GetUserIDDatabase(_currentUser);
UserStore<IdentityUser> userStore = new UserStore<IdentityUser>();
UserManager<IdentityUser> manager = new UserManager<IdentityUser>(userStore);
IdentityUser user = manager.FindById(userId);
manager.UserTokenProvider = new DataProtectorTokenProvider<IdentityUser, string>
(provider.Create("UserToken")) as IUserTokenProvider<IdentityUser, string>;
string token = manager.GeneratePasswordResetToken(userId);
manager.ResetPassword(userId, token, _newPassword);
string hashedNewPassword = manager.PasswordHasher.HashPassword(_newPassword);
await userStore.SetPasswordHashAsync(user, hashedNewPassword);
await userStore.UpdateAsync(user);
ScriptManager.RegisterClientScriptBlock(Page, GetType(), "myalert", "alert('Password changed successfully!');", true);
_success = true;
}
但是ScriptManager没有显示任何消息。有什么想法吗?
答案 0 :(得分:1)
正如我在博客中描述的async
doesn't change the HTTP protocol。一旦您的服务器发送了对请求的响应,它就不能在以后决定发送另一个响应; HTTP只是不起作用。
我建议您的JavaScript通过AJAX调用此方法,然后在其AJAX Promise
结算时自动引发警报。
答案 1 :(得分:0)
无论是异步还是等待你编写,C#都将在服务器上完全执行,而不是将中间JavaScript发送到浏览器。 RegisterClientScriptBlock
不用于在“内部”C#代码