如何在异步方法asp net中显示警报

时间:2016-05-10 11:53:37

标签: javascript c# asp.net asynchronous

我想在异步方法完成时显示警告。

这是我到目前为止所做的:

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没有显示任何消息。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

正如我在博客中描述的async doesn't change the HTTP protocol。一旦您的服务器发送了对请求的响应,它就不能在以后决定发送另一个响应; HTTP只是不起作用。

我建议您的JavaScript通过AJAX调用此方法,然后在其AJAX Promise结算时自动引发警报。

答案 1 :(得分:0)

无论是异步还是等待你编写,C#都将在服务器上完全执行,而不是将中间JavaScript发送到浏览器。 RegisterClientScriptBlock不用于在“内部”C#代码

中发送和执行JavaScript