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将跟踪异步任务,直到完成后才发送响应,但这是否意味着在所有无效任务完成之前不会呈现页面?从来没有读过。。。