【问题标题】:How to call Javascript alert from code behind in asp.net如何从 asp.net 中的代码调用 Javascript 警报
【发布时间】:2019-07-23 15:00:47
【问题描述】:

我使用下面的代码来显示来自 asp.net 后面代码的警报消息。

Home.aspx:

 <asp:ScriptManager runat="server" ID="smHome"></asp:ScriptManager>

Home.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
   if (!Page.IsPostBack)
   {
      ScriptManager.RegisterStartupScript(this, this.GetType(), "ShowStartStatus", "javascript:alert('Process is started');", true);
      LoadGridView();
   }
}

protected void LoadGridView() 
{
   //ADO.NET code here
   ScriptManager.RegisterStartupScript(this, this.GetType(), "ShowCompletedStatus", "javascript:alert('Process is completed');", true);
}

但在完成 LoadGridView() 方法中可用的 ADO.NET 进程后,两条警报消息都已连续显示。我想在 LoadGridView() 方法之前显示第一条警报消息。我还需要在完成 ADO.NET 进程后显示第二条警报消息。我也尝试过 ClientScriptManager.RegisterClientScriptBlock 方法来显示这些警报消息。但它也没有按预期工作。如何解决上述问题?

【问题讨论】:

  • 您是否意识到后端完成,前端开始运行?前端和后端不一起运行。
  • “我想在 LoadGridView() 方法之前显示第一条警报消息”。你不能。您似乎不了解您的页面生命周期。基本上,当您的浏览器尝试加载您的 aspx 页面时,它会向服务器发送一个 HTTP 请求。 ASP.NET 在您的 aspx 代码隐藏中运行代码。然后它将结果数据(即一个网页,可能包括 HTML、CSS 和 JavaScript)返回给浏览器。然后服务器停止执行代码。该页面现在位于用户的浏览器中。此时,页面中包含的任何 JavaScript 代码都将由浏览器编译和执行。
  • @ADyson,有没有其他方法可以实现上述要求?
  • 在浏览器向服务器发出另一个请求(例如通过单击链接或提交表单或其他内容)之前,不再运行 .NET 代码。如果您想在加载 gridview 时在屏幕上显示一条消息,那么您必须加载页面、显示消息并通过 AJAX 请求触发 gridview 的加载(在 ASP.NET WebForms 中,您通常可以通过使用 UpdatePanel 控件很好地实现这一点),以便加载发生在对服务器的单独请求中(并且 AJAX 请求特别不会导致页面的其余部分同时重新加载)。
  • 我建议您学习 Microsoft 提供的 ASP.NET 页面生命周期文档,和/或更通用的教程/指南,这些教程/指南通常会解释 HTTP 生命周期。也许也读一下:stackoverflow.com/questions/13840429/…

标签: javascript c# asp.net code-behind


【解决方案1】:

“我想在 LoadGridView() 方法之前显示第一条警报消息”。

你不能。您似乎不了解页面的生命周期。

基本上,当您的浏览器尝试加载您的 aspx 页面时,它会向服务器发送一个 HTTP 请求。 ASP.NET 在您的 aspx 代码隐藏中运行代码。然后它将结果数据(即一个网页,可能包括 HTML、CSS 和 JavaScript)返回给浏览器。然后服务器停止执行代码。该页面现在位于用户的浏览器中。此时,页面中包含的任何 JavaScript 代码都将由浏览器编译和执行。在浏览器向服务器发出另一个请求(例如通过单击链接或提交表单或其他内容)之前,不会再运行更多 .NET 代码。

总而言之 - JavaScript 和 .NET 代码在不同的时间、不同的上下文中运行。您无法使用传统的生命周期使它们像那样互锁。

如果您想在加载 gridview 时在屏幕上显示消息,那么您必须加载页面、显示消息并通过 AJAX 请求触发加载 gridview(在 ASP.NET WebForms 中)您通常可以通过使用 UpdatePanel 控件很好地实现这一点),以便加载发生在对服务器的单独请求中(并且 AJAX 请求特别不会导致页面的其余部分同时重新加载)。

【讨论】:

    【解决方案2】:

    你试过了吗?

    ASP.NET Web Application Message Box

    ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + message+ "');", true);
    

    【讨论】:

    • 我认为您错过了问题的重点。不在于使用哪个 JS 代码,而在于整个流程。
    猜你喜欢
    • 2016-04-02
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2017-05-03
    • 1970-01-01
    • 2015-05-03
    相关资源
    最近更新 更多