ASP.Net/Ajax/UpdatePanel

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

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>