Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在asp net异步方法中显示警报_Javascript_C#_Asp.net_Asynchronous - Fatal编程技术网

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

Javascript 如何在asp net异步方法中显示警报,javascript,c#,asp.net,asynchronous,Javascript,C#,Asp.net,Asynchronous,我想在异步方法完成时显示一个警报 这就是我到目前为止所做的: private async void SetPassword() { var provider = new DpapiDataProtectionProvider("RDSupport"); string userId = Support.Instance.GetUserIDDatabase(_currentUser); UserStore<IdentityUser> userStore = n

我想在异步方法完成时显示一个警报

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

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;
}
private async void SetPassword()
{
var provider=新的DpapiDataProtectionProvider(“RDSupport”);
字符串userId=Support.Instance.GetUserIDDatabase(\u currentUser);
UserStore UserStore=新的UserStore();
UserManager=newusermanager(userStore);
IdentityUser user=manager.FindById(userId);
manager.UserTokenProvider=新的DataProtectorTokenProvider
(provider.Create(“UserToken”))作为IUserTokenProvider;
string token=manager.GeneratePasswordResetToken(userId);
manager.ResetPassword(userId、token、\u newPassword);
字符串hashedNewPassword=manager.PasswordHasher.HashPassword(\u newPassword);
wait userStore.SetPasswordHashAsync(用户,hashedNewPassword);
等待userStore.UpdateAsync(用户);
ScriptManager.RegisterClientScriptBlock(第页,GetType(),“myalert”,“alert('Password changed successfully!”);”,true);
_成功=真实;
}

但是ScriptManager没有显示任何消息。有什么想法吗?

无论是异步的还是等待您编写的,C#都将在服务器上完全执行,而不会向浏览器发送中间JavaScript
RegisterClientScriptBlock
不用于发送和执行JavaScript“内部”C#code

,正如我在博客中所描述的那样。一旦您的服务器发送了一个请求响应,它就不能再决定发送另一个响应;HTTP就是不能这样工作


我建议您的JavaScript通过AJAX调用此方法,然后在其AJAX
Promise
解决时自行发出警报。

如果调用
async void
函数,它将异步执行,而无需等待完成,因此问题是此代码将在页面呈现后执行。将其更改为
async Task
等待它或使其同步。另一种解决方案是在网页上粘贴一个UpdatePanel,其中包含一个标签,然后您的方法可以写入该标签。@Gusman:通常是这样,但是ASP.NET网页会做一些额外的工作,在发送响应之前异步等待
async void
方法完成。@Gusman:好的。完成。但是现在userStore.UpdateAsync(用户)占用了太多的时间,而且不起作用。@StephenCleary我知道ASP.net将跟踪异步任务,直到完成后才发送响应,但这是否意味着在所有无效任务完成之前不会呈现页面?从来没有读过。。。