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

标签 javascript asp.net

我是 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() 不会执行

  • 如果我单击"is":不会执行任何 JavaScript 代码,因此会继续执行并执行 MoreCode()。

事实并非如此。 当我单击带有逐步调试器的按钮时,我可以看到:

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

  • 然后执行 MoreCode()

  • 然后弹出弹出窗口

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

提前致谢。

最佳答案

MoreCode() 在服务器端运行,而弹出窗口在客户端运行。他们是独立运作的。如果 MoreCode 必须在单击按钮后运行,那么您需要在 JavaScript 中进行回调,并将其附加到

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

回调将绑定(bind)到服务器调用,并且该服务器调用将执行 MoreCode。

关于javascript - 在 ASP.Net 中运行 javascript 时的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611901/

相关文章:

JavaScript 模板

ASP.Net 菜单控件在母版页上使用时呈现不正确

asp.net - 但是这个字典需要一个类型为 'System.Collections.Generic.IEnumerable` 1[MvcApplication1.Models.FileStore]' 的模型项

c# - 在xml文件中写入innertext

javascript - View 中的多个 VizFrame

javascript - 如果 JavaScript 关闭或禁用,允许浏览器回退到链接的最佳方法是什么?

asp.net - 为什么 Cache.Add 返回一个表示缓存项的对象?

c# - DataAnnotations 在错误消息中不使用 DisplayName 属性

javascript - 如何在 Meteor Iron-router 的内部模板中访问全局数据

javascript - react 路由器 onEnter 函数 "Uncaught RangeError: Maximum call stack size exceeded"