ASP.Net/Ajax/UpdatePanel
Содержание
[убрать]Configure Web.Config in order to use asp:ScriptManager
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>
Database messages being updated asynchronously.
<%@ 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") %>
<hr />
<asp:ListView
id="lstMessages"
DataSourceID="srcMessages"
Runat="server">
<LayoutTemplate>
<div id="itemContainer" runat="server">
</div>
</LayoutTemplate>
<ItemTemplate>
<div>
Posted by <%# Eval("PostedBy") %>
<div class="message">
<%# Eval("Post") %>
</div>
</div>
</ItemTemplate>
</asp:ListView>
</ContentTemplate>
</asp:UpdatePanel>
<asp:ObjectDataSource
id="srcMessages"
TypeName="Message"
SelectMethod="Select"
Runat="server" />
</form>
</body>
</html>
Handling UpdatePanel Errors Gracefully
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>
On the server, you can handle the ScriptManager control"s AsyncPostBackError event to customize the error message transmitted to the client.
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>