在ASP.Net中运行javascript时的执行顺序

execution order when running a javascript inside ASP.Net

本文关键字:执行 顺序 javascript 运行 ASP Net      更新时间:2024-02-16

我不了解ASP.net。我试图在网页上添加一个确认弹出窗口。我使用了以下代码:(这是一个变体:http://www.codeproject.com/Articles/8173/A-Simple-ASP-NET-Server-Control-Message-Box-Confir)

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Text;
namespace BunnyBear
{
    [DefaultProperty("Text"),
        ToolboxData("<{0}:msgBox runat=server></{0}:msgBox>")]
    public class msgBox : System.Web.UI.WebControls.WebControl
    {
        //private string msg;
        private string content;
        [Bindable(true),
            Category("Appearance"),
            DefaultValue("")]
  public  void confirm2(string msg)
        {
            string sMsg = msg.Replace("'n", "''n");
            sMsg = msg.Replace("'"", "'");
            StringBuilder sb = new StringBuilder();

            sb.Append(@"<script language='javascript'>");
            sb.Append(@" if(confirm( """ + sMsg + @""" ))");
            sb.Append(@" { }");
            sb.Append(@" else { ");
            sb.Append( "document.forms[0].submit(); }");

            sb.Append(@"</script>");
            content = sb.ToString();
        }
    protected override void Render(HtmlTextWriter output)
        {
            output.Write(this.content);
        }
    }
}

我从一个测试类中尝试如下:

     //event triggered when clicking a button
protected void Button2_Click(object sender, EventArgs e) 
            {
                msgBox1.confirm2("are you sure?");

               MoreCode();
            }

我原以为当我点击按钮时,会弹出确认弹出窗口,询问我是否要确认:

  • 如果我单击"否":发生回发,因此MoreCode()不会执行

  • 如果我点击"是":则不会执行javascript代码,因此执行将继续,并执行MoreCode()。

事实并非如此。当我用分步调试器点击按钮时,我可以看到:

  • 它执行msgBox1.confirm2("你确定吗?");

  • 然后执行MoreCode()

  • 然后弹出窗口弹出

你能解释一下为什么按这个顺序执行吗?

提前谢谢。

MoreCode()在服务器端运行,而弹出窗口在客户端运行。它们是独立的行动。如果MoreCode必须在点击按钮后运行,那么您需要在JavaScript中有一个回调,并将其附加在之后

sb.Append(@" if(confirm( """ + sMsg + @""" ))");

回调将绑定到服务器调用,该服务器调用将执行MoreCode。

由于您没有使用任何AJAX,操作顺序很清楚:运行所有服务器端代码,然后HTML返回到浏览器,浏览器在浏览器中执行任何必要的客户端代码。以下是从点击Button2开始按顺序发生的情况:

  1. 调用Button2_Click服务器事件。此事件执行要求它执行的所有操作:创建一个将被注入到结果HTML页面的字符串,然后运行MoreCode()。控件尚未返回到浏览器--所有这些处理都在服务器端处理
  2. 生成的页面的HTML将与您注入的字符串一起呈现,其中包括您编写的JavaScript
  3. HTML被传送到浏览器并且HTML被执行。您的脚本会触发一个JavaScript提示,然后使用服务器端指定的文本向用户显示该提示