天天看點

asp.net(vs2005)使用updatepanel控件詳解

     最近做一個網站,裡面涉及到級聯的問題(如省-市,品牌-型号等), 我用的是DropDownList來實作的,設定父級的AutoPostBack屬性為真.然後在它的SelectedIndexChanged()事件裡寫相應的代碼,這樣就能實作級聯關系(當然這裡要注意IsPostBack的問題).  做好之後用時發現一個非常不爽的問題,那就是每次都會重新整理,這樣的體驗自已都感覺非常不爽(更不敢交給客戶).是以就上網找一些關于無重新整理級聯的東東,東東真不少,有javascript ,ajrx, updatepanel等,關于這些差別可能上網查。

     由于是第一次用這些東東,而且項目周期所限,就後選擇最簡單的updatepanel.雖然很簡單,但在這個過程中也有一些問題,特别對于像我這樣完全沒有接觸過ajax的菜鳥了(剛開始連updatepanel在哪,怎麼添加都不知道?)。呵呵費話已說了很多了,接下來我來說說我的整個過程.

      1、安裝Ajax元件(這樣最簡單友善)。在百度輸入(ASP.NET AJAX 1.0 下載下傳)即可找到需要下載下傳的軟體。

            安裝後将X:/Program Files/Microsoft ASP.NET/ASP.NET 2.0 Ajax Extensions/v1.0.61025

目錄下的System.Web.Extensions.Design.dll檔案加到項目的bin目錄下,檔案複制到網站bin目錄

         安裝了asp.net Ajax後會有三個dll檔案

                                     System.Web.Extensions.Design.dll

                                     AjaxExtensionsToolbox.dll

                                     System.Web.Extensions.dll

         一般應該将這三個檔案都添加到項目的bin目錄下,要保險的話,全部複制進去吧

       2、添加引用。在解決方案視圖視窗中,右擊網站名稱--添加引用--浏覽。找到工程的bin目錄選擇System.Web.Extensions.Design.dll和System.Web.Extensions.dll.然後确定,完成引用的添加.

       3、把updatepanel添加到工具欄中. 右擊工具欄空白處--選擇項--浏覽:找到工程bin目錄并選擇System.Web.Extensions.dll. 然後在上面的選擇剛添加的工具(選擇時要厘清版本,不在選擇3.5(假如你安裝了。net3.5)),完成後在工具欄的标準中的最下方添加了兩個控件ScriptManager和UpdatePanel

       到這一步就可以和使用控件沒有什麼差別了,但是我的項目中的無重新整理級聯沒有效果--即安裝好updatepanel後會出現不好用,導緻随時都是整個頁面的重新整理. 

       上網找對了一些資料懂了一點點,知道由于我建立的不是Ajax的項目,是以無效,但可以改配置檔案。如果沒有改配置檔案可以出錯像("System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一個依賴項。系統找不到指定的檔案。)這樣的錯誤.

       接下來讓我們來看一下webconfig的修改吧!

       1、<assemblies></assemblies>之間加入 :<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>  (如果沒有這一句就加入)

       2、在檔案的<system.web></system.web>配置節中加一段代碼

我這裡講述的是updatepanel的使用及配置,對于它的原理網上很大大家可以上網,(其實我也沒懂,因為我是個菜鳥). 對于updatepanel的屬性等的設定有不明白的也可以上網查,但是要設定和要注意的地方我一般有紅色标明了!

希望高手們指點,和我一樣的菜鳥多交流!

<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="*" path="*_AppService.axd" 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>

<httpModules>

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

</httpModules>

         到這裡就可以正确的使用updatepanel控件了,且出現了我要的效果,呵呵,(對于我來說)不容易啊!小小樂一下!

接下我發個小例子讓大家參考一下(說好聽的,主要還是防止以後忘了,可以來看一眼)

                 (注意:   aspx頁面加入 注冊:

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

)--其實拖完控件它自動注冊了!

//在updatepanel使用之前一定要先加這個控件,且它的EnablePartialReadering = True         

<asp:ScriptManager id="ScriptManager1" runat="server">

</asp:ScriptManager>   <table style="background-image: url(../images/search.jpg); width: 950px; background-repeat: no-repeat; height: 58px">

   <tr valign="bottom">

         <td valign="middle" style="height: 27px" >

              <asp:TextBox ID="txtSearch" runat="server" Width="174px"></asp:TextBox></td>

         <td valign="middle" style="height: 27px" >                 //省份下拉清單

               <asp:DropDownList ID="ddlProvice" runat="server" Width="53px"             OnSelectedIndexChanged="ddlProvice_SelectedIndexChanged" Font-Size="14px" Height="23px"             AutoPostBack="True">

            </asp:DropDownList>               //把要重新整理的控件包含在updatepanel裡面,盡量的少,這些就可以減少網絡的傳輸        UpdateMode 屬性設: Conditional

            <asp:UpdatePanel id="UpdatePanel1" runat="server">

                 <ContentTemplate>

                     <asp:DropDownList ID="ddlCity" runat="server" Width="61px" Font-Size="14px" Height="23px">

                     </asp:DropDownList>

               </ContentTemplate>

                                //觸發器                 <Triggers>

                     <asp:AsyncPostBackTrigger ControlID="ddlProvice" EventName="SelectedIndexChanged" />

                 </Triggers>

            </asp:UpdatePanel> 

            </td>        </tr> </table>   背景代碼:            //省份的相應事件      protected void ddlProvice_SelectedIndexChanged(object sender, EventArgs e)

    {

        int pid = int.Parse(((DropDownList)sender).SelectedValue);

        if(pid==0)

        {

            ddlCity.Items.Insert(0, "<--城市-->");

            ddlCity.Items[0].Value = "0";

        }

        else

        {

            BindCity(pid);    //綁定函數

        }

    }  

繼續閱讀