ASP.NET—015:ASP.NET中無刷新頁面實現


原文作者:楊友山

原文地址:http://blog.csdn.net/yysyangyangyangshan/article/details/39679823

前面也說過在asp.net中前后前交互的問題。使用了ajax.js的方法:$.post和$.ajax。

http://blog.csdn.net/yysyangyangyangshan/article/details/22755007
http://blog.csdn.net/yysyangyangyangshan/article/details/22438077
這樣的方式對於少量控件的更新和取值,以及button的操作事件等都比較適用。

只是對於gridview控件的綁定就不方便了,使用gridview的databind在線程中不能綁定數據。所以這里再介紹一種無刷新頁面的方法,也就是updatepanel控件。

也是ajax中的。


不多說了,直接看用法。


1、准備工作。
須要准備例如以下三個dll。
System.Web.Extensions.Design.dll
System.Web.Extensions.dll
AjaxControlToolkit.dll
前兩個都好說,僅僅要安裝ASPAJAXExtSetup 1.0.exe就有了,詳細文件夾在:安裝盤\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025下。
對於AjaxControlToolkit.dll則須要安裝AjaxControlToolkit-framework x.x。
本文是針對.net framework2.0的,所下面載AjaxControlToolkit-framework2.0 ,這個網上有帶源代碼的。


下載地址:http://download.csdn.net/detail/yysyangyangyangshan/7991393
將這三個dll引用到project中。AjaxControlToolkit.dll這里下載的是源代碼,須要自己把程序集生成為dll再引用進project中來。


在工具箱中就有了例如以下控件:

2、 配置文件
web.config中須要添加例如以下節點
<system.web></system.web>中:
      <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
     </httpHandlers>
1.0.61025.0要和ASPAJAXExtSetup安裝后的文件夾版本號相應。
3、頁面注冊
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    Namespace="System.Web.UI" TagPrefix="asp" %>
用法例如以下:
這里簡單實現下面:點擊button,然后頁面文本框顯示當前時間。


project:
001
前台:

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    Namespace="System.Web.UI" TagPrefix="asp" %>


<!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">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:updatepanel runat="server">
         <ContentTemplate>
            <asp:TextBox ID="txtTime" runat="server" Width="150px"></asp:TextBox>
            <asp:Button  ID="btnTime" runat="server" Text="獲取系統時間" OnClick="Btn_Time_Click"/>
         </ContentTemplate>
        </asp:updatepanel>
    </div>
    </form>
</body>
</html>
后台:
  public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
        }


        protected void Btn_Time_Click(object sender, EventArgs e)
        {
            this.txtTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }
    }
web.config配置
<?xml version="1.0"?

> <configuration> <appSettings /> <connectionStrings /> <system.web> <compilation debug="true"> </compilation> <!-- 通過 <authentication> 節能夠配置 安全身份驗證模式,ASP.NET 使用該模式來識別來訪用戶身份。

--> <authentication mode="Windows" /> <!-- 假設在運行請求的過程中出現未處理的錯誤, 則通過 <customErrors> 節 能夠配置相應的處理步驟。詳細而言。 開發者通過該節可配置要顯示的 html 錯誤頁。 以取代錯誤堆棧跟蹤。 <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors> --> <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/> </httpHandlers> </system.web> </configuration>

這樣一來。button的click事件后,頁面就不會總體刷新了。而updatepanel要注意寫法:
<asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:updatepanel runat="server">
         <ContentTemplate>
           <!--放置你的控件-->
         </ContentTemplate>
        </asp:updatepanel>

這樣不論是簡單的textbox。還是對gridview綁定都能夠了。

另外,針對updatepanel之間的控件,假設有的須要局部刷新,有的須要總體頁面刷新,能夠用到Triggers標簽。格式例如以下:

<asp:ScriptManager ID="ScriptManager1" runat="server">
 </asp:ScriptManager>
<asp:updatepanel runat="server">
<ContentTemplate> 
<!-- 用戶控件-->
</ContentTemplate> 
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="" EventName="" />
    <asp:PostBackTrigger ControlID="" />
  </Triggers>
</asp:updatepanel>

而每一次局部刷新完畢后的事件也是能夠加以利用的。假設想在刷新完后再做某些處理,能夠在script中加例如以下代碼:

<script type="text/javascript">
    $(function () {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    });


    function EndRequestHandler() {
       //刷新后的操作
    }
  </script>
使用的樣例見下文。
代碼下載: http://download.csdn.net/detail/yysyangyangyangshan/7991427



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM