我是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()
然后弹出窗口
你能解释一下为什么这个按此顺序执行吗?
提前致谢。
答案 0 :(得分:0)
MoreCode()在服务器端运行,而弹出窗口在客户端。他们是独立的业务。如果在单击按钮后必须运行MoreCode ,那么您需要在JavaScript中进行回调,然后在
之后附加回调。sb.Append(@" if(confirm( """ + sMsg + @""" ))");
回调将绑定到服务器调用,该服务器调用将执行MoreCode。
答案 1 :(得分:0)
由于您没有使用任何AJAX,操作顺序很明确:运行所有服务器端代码,然后将HTML返回到浏览器,浏览器执行任何必要的客户端代码。以下是从您点击Button2
开始的顺序:
Button2_Click
服务器事件。此事件会执行要求执行的所有操作:创建将注入到生成的HTML页面的字符串,然后运行MoreCode()
。控件尚未返回到浏览器 - 所有这些处理都在服务器端处理。