--------------------------------代码实现异步回传--------------------------------------------
页面关键代码
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%= DateTime.Now %>
<asp:Button ID="Button2" runat="server" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</form>
</body>
后台代码
public partial class Demo2_API : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//让button1能够引发异步回传(且button1不在UpdatePanel中)
ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(this.Button1);
//让button2能够引发同步回传(且button2在UpdatePanel中)
ScriptManager.GetCurrent(this).RegisterPostBackControl(this.Button2);
}
protected void Button1_Click(object sender, EventArgs e)
{
this.UpdatePanel1.Update();//更新UpdatePanel1中的内容
}
}
----------------------异步回传时弹出javascript脚本-----------------------
页面关键代码
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<%= DateTime.Now %>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click1" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<%= DateTime.Now %>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
后台代码:
public partial class Demo5_ScriptManagerReg : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click1(object sender, EventArgs e)
{
//在UpdatePanel1更新时弹出javascript脚本
ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "UpdatePanel1", "alert(1)", true);
//在UpdatePanel2更新时弹出javascript脚本
ScriptManager.RegisterStartupScript(this.UpdatePanel2, this.GetType(), "UpdatePanel2", "alert(2)", true);
}
}
-----------------------利用代码(创建UpdatePanel)实现AJAX效果-----------------------------
页面代码:
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</form>
</body>
后台代码:
public partial class Demo7_ProgramicUpdatePanel : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
UpdatePanel up = new UpdatePanel();
up.ID = "UpdatePanel1";
this.Form.Controls.Add(up);
LiteralControl lc = new LiteralControl(DateTime.Now.ToString());
up.ContentTemplateContainer.Controls.Add(lc);
Button btn = new Button();
btn.Text = "Refresh";
up.ContentTemplateContainer.Controls.Add(btn);
}
}
--------------------AJAX异步更新的错误处理-----------------------------------------------------
可以通过ScriptManager控件的OnAsyncPostBackError事件和AsyncPostBackErrorMessage属性捕捉和设置回传时的错误消息
示例:
页面代码:
后台代码:
public partial class UpdatePanelErrorMessage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
try
{
double a = Convert.ToDouble(TextBox1.Text.Trim());
double b = Convert.ToDouble(TextBox2.Text.Trim());
double res = a * b;
Label2.Text = res.ToString("f3");//输出字符串格式的控制
}
catch (Exception ex)
{
if (TextBox1.Text.Length > 1 && TextBox2.Text.Length > 1)
{
ex.Data["cuo"] = "这两个数无法相乘!";
}
throw ex;
}
}
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
if (e.Exception .Data ["cuo"]!=null )
{
ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Data["cuo"].ToString();
}
else
{
ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message;
}
}
}