`

代码实现AJAX异步回传(弹出javascript脚本)、异步更新的错误处理

 
阅读更多

--------------------------------代码实现异步回传--------------------------------------------
页面关键代码

<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属性捕捉和设置回传时的错误消息

示例:

页面代码:

  1. <body>
  2. <form id="form1" runat="server">
  3. <div>
  4. <asp:ScriptManager ID="ScriptManager1" runat="server" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError">
  5. </asp:ScriptManager>
  6. </div>
  7. <asp:UpdatePanel ID="UpdatePanel1" runat="server" >
  8. <ContentTemplate>
  9. <asp:TextBox ID="TextBox1" runat="server" Width="56px"></asp:TextBox>
  10. <asp:Label ID="Label1" runat="server" ForeColor="DarkViolet" Text="+" Width="13px"></asp:Label>
  11. <asp:TextBox ID="TextBox2" runat="server" ForeColor="DarkOrchid" Width="67px"></asp:TextBox>
  12. <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="计算" />
  13. <asp:Label ID="Label2" runat="server" ForeColor="#0000C0" Text="Label"></asp:Label>
  14. </ContentTemplate>
  15. </asp:UpdatePanel>
  16. </form>
  17. </body>

后台代码:

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;
}
}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics