ASP.Net/Ajax/UpdatePanel
Содержание
Configure Web.Config in order to use asp:ScriptManager
<source lang="csharp">
File: Default.aspx <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">
protected void btnSubmit_Click(object sender, EventArgs e) { throw new Exception("Server Error"); }
</script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">
<title>UpdatePanel Error</title>
</head> <body>
<form id="form1" runat="server"> <asp:ScriptManager id="sm1" Runat="server" /> <asp:UpdatePanel id="up1" runat="server"> <ContentTemplate> <asp:Button id="btnSubmit" Text="Submit" OnClick="btnSubmit_Click" Runat="server" /> </ContentTemplate> </asp:UpdatePanel> </form>
</body> </html>
Web.Config
<configuration>
<system.web> <customErrors mode="Off"/> <compilation debug="true"/> <pages> <controls> <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </controls> </pages> </system.web>
</configuration>
</source>
Database messages being updated asynchronously.
<source lang="csharp">
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <body>
<form id="form1" runat="server"> <asp:ScriptManager ID="sm1" runat="server" /> <asp:Timer ID="Timer1" Interval="5000" runat="server" /> <asp:UpdatePanel ID="up1" runat="server"> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> </Triggers> <ContentTemplate> Last Refresh <%= DateTime.Now.ToString("T") %>
<asp:ListView id="lstMessages" DataSourceID="srcMessages" Runat="server"> <LayoutTemplate>
</LayoutTemplate> <ItemTemplate>
Posted by <%# Eval("PostedBy") %>
</ItemTemplate> </asp:ListView> </ContentTemplate> </asp:UpdatePanel> <asp:ObjectDataSource id="srcMessages" TypeName="Message" SelectMethod="Select" Runat="server" /> </form>
</body> </html>
</source>
Handling UpdatePanel Errors Gracefully
<source lang="csharp">
You enable a custom error page by adding the following element to the system.web section of your web configuration file: <customErrors mode="On" defaultRedirect="ErrorPage.aspx" />
File: Default.aspx <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">
protected void btnSubmit_Click(object sender, EventArgs e) { throw new Exception("Server Error"); }
</script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">
<title>UpdatePanel Error</title>
</head> <body>
<form id="form1" runat="server"> <asp:ScriptManager id="sm1" Runat="server" /> <asp:UpdatePanel id="up1" runat="server"> <ContentTemplate> <asp:Button id="btnSubmit" Text="Submit" OnClick="btnSubmit_Click" Runat="server" /> </ContentTemplate> </asp:UpdatePanel> </form>
</body> </html>
You can disable custom error pages in the case of an asynchronous postback by adding an AllowCustomErrorRedirect attribute to the ScriptManager tag, like this: <asp:ScriptManager
id="sm1" AllowCustomErrorsRedirect="false" Runat="server" />
Web.Config
<configuration>
<system.web> <customErrors mode="Off"/> <compilation debug="true"/> <pages> <controls> <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </controls> </pages> </system.web>
</configuration>
</source>
On the server, you can handle the ScriptManager control"s AsyncPostBackError event to customize the error message transmitted to the client.
<source lang="csharp">
File: UpdatePanelErrorServer.aspx <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">
protected void btnSubmit_Click(object sender, EventArgs e) { throw new Exception("Server Error"); } protected void sm1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) { sm1.AsyncPostBackErrorMessage = "A server error occurred"; }
</script> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server">
<title>UpdatePanel Error Server</title>
</head> <body>
<form id="form1" runat="server"> <asp:ScriptManager id="sm1" OnAsyncPostBackError="sm1_AsyncPostBackError" Runat="server" /> <asp:UpdatePanel id="up1" runat="server"> <ContentTemplate> <asp:Button id="btnSubmit" Text="Submit" OnClick="btnSubmit_Click" Runat="server" /> </ContentTemplate> </asp:UpdatePanel> </form>
</body> </html>
</source>