AJAX Control Toolkit for.NET 4.0新增功能介紹

在2011/5/26的時候新版的AJAX Control Toolkit又有新的版本了,而當然,在Visual Studio 2010開始支援了jQuery等套件後,即使AJAX Control Toolkit再有新的版本出現也就相形失色不少。但也不完全表示它完全沒有價值,如果您有一些從ASP.NET 2.0升上來的Web Form專案,且也有使用.NET 2.0版的AJAX Control Toolkit時

在2011/5/26的時候新版的AJAX Control Toolkit又有新的版本了,而當然,在Visual Studio 2010開始支援了jQuery等套件後,即使AJAX Control Toolkit再有新的版本出現也就相形失色不少。但也不完全表示它完全沒有價值,如果您有一些從ASP.NET 2.0升上來的Web Form專案,且也有使用.NET 2.0版的AJAX Control Toolkit時,可以直接改以目前Release出來的這個新的版本。它對於開發上的生產力其實很有幫助的。因為您不需要去處理太多XMLHTTP非同步的處理等技術細節。

這一次Release的AJAX Control Toolkit還是有一些值得一提的部分。

4.0的部分增強了下面兩個控制項:

  1. ModalPopup (強制對話框)
  2. AsyncFileUpload (非同步檔案上傳控制項)

並新增了:

  1. Animated (一個動畫特效的控制項)

 

以下為實做的部分:

1.ModalPopup 控制項

在ModalPopup 控制項的部分也有一些增強,且設計的方式更簡單了,新增了 OKControlID、DropShadow、BackgroundCssClass 等屬性,OKControlID是設定在Panel中要關閉 Popup Window 的按鈕,DropShadow是設定Popup Window是否要顯示陰影,而BackgroundCssClass就很直覺不多作說明了。

當我們要使用ModalPopup  擴充 (以下都稱為Extender)控制項時,畫面必然會有一個Button來開啟這個Popup Window ,所以這個Extender的TargetControlID當然就是這個Button了。建議以視覺化方式加入ModalPopup Extender,如下圖:

image

當然您得先在畫面上放置一個Panel 控制項作為該Popup Window使用,接著就是指定 PopupControlID、OkControlID、DropShadow、BackgroundCssClass等屬性,完成後程式碼大概如下:

   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
   2:  <%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>
   3:   
   4:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   5:   
   6:  <html xmlns="http://www.w3.org/1999/xhtml">
   7:  <head runat="server">
   8:      <title></title>
   9:      <style type="text/css"> 
  10:          html {
  11:              background-color: blue;   
  12:          }
  13:          #dialog {
  14:              border: 2px solid black;
  15:              width: 500px;   
  16:              background-color: White;
  17:          }
  18:          #dialogContents {
  19:              padding: 10px;   
  20:          }
  21:          .modalBackground {
  22:               background-color:Gray;
  23:              filter:alpha(opacity=70);
  24:              opacity:0.7;
  25:          }
  26:      </style>
  27:  </head>
  28:  <body style="background-color: #9999FF">
  29:      <form id="form1" runat="server">
  30:      <asp:ScriptManager ID="ScriptManager1" runat="server">
  31:      </asp:ScriptManager>
  32:      <div>
  33:      
  34:      </div>
  35:      <asp:Panel ID="Panel1" runat="server" BackColor="#FF0066" Height="200px" 
  36:          Width="200px">
  37:          TEST by Gelis!!!<br />
  38:          <asp:Button ID="Button1" runat="server" Text="OK" />
  39:      </asp:Panel>
  40:      <asp:ModalPopupExtender ID="Panel1_ModalPopupExtender" runat="server" 
  41:          DynamicServicePath="" Enabled="True" 
  42:          TargetControlID="btnOpenModalDialog"
  43:          PopupControlID="Panel1"
  44:          OkControlID="Button1"
  45:          DropShadow="true"
  46:          BackgroundCssClass="modalBackground"
  47:          ></asp:ModalPopupExtender>
  48:      <p>
  49:          <asp:Button ID="btnOpenModalDialog" runat="server" 
  50:              onclick="btnOpenModalDialog_Click" Text="OpenModalDialog" />
  51:      </p>
  52:      </form>
  53:  </body>
  54:  </html>

 

程式效果如下:

image

 

2. AsyncFileUpload 非同步檔案上傳控制項

非同步上傳檔案,這在現今許多網站都有這樣的需求,當畫面欄位很多時,且需要上傳較大的檔案時,不希望檔案到最後按下Submit時才開始上傳,這麼一來一瞬間資料量過大,不僅在用量尖峰時刻Server較負荷不了,當時的網路頻寬也容易吃緊,所以為什麼不能夠在使用者還在輸入資料時就在背後上傳檔案呢?於是這一類的解決方案就出現了,其實這個非同部的方式早也不是新的東西了,有第三方的元件可以達成,或有有人使用UploadPanel 配合FileUpload控制向來實作類似的效果。不過現在AJAX Control ToolKit 中提供的AsyncFileUpload 可以讓您輕易的做出這個效果。

要實做這樣的效果首先就在畫面放置任一個TextBox並使用一個RequiredFieldValidator控制項確保畫面不會隨時被Submit,然後並放置一個AsyncFileUpload  控制項。程式碼如下:

   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AsyncFileUpload.aspx.cs" Inherits="AsyncFileUpload" %>
   2:   
   3:  <%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>
   4:   
   5:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   6:   
   7:  <html xmlns="http://www.w3.org/1999/xhtml">
   8:  <head runat="server">
   9:      <title></title>
  10:  </head>
  11:  <body>
  12:      <form id="form1" runat="server">
  13:      <asp:ScriptManager ID="ScriptManager1" runat="server">
  14:      </asp:ScriptManager>
  15:      <div>
  16:      
  17:      </div>
  18:      <asp:Label ID="Label1" runat="server" Text="使用者名稱 :"></asp:Label>
  19:      <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
  20:      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
  21:          ControlToValidate="txtUserName" Display="Dynamic" ErrorMessage="使用者名稱必須輸入!" 
  22:          ForeColor="#FF3300"></asp:RequiredFieldValidator>
  23:      <br />
  24:      <asp:AsyncFileUpload ID="AsyncFileUpload1" 
  25:          ThrobberID="imgAnimal"
  26:          UploadingBackColor="#6666ff"
  27:          ErrorBackColor="red"
  28:          CompleteBackColor="green"
  29:          UploaderStyle="Modern"
  30:          PersistFile="true"
  31:          runat="server" />
  32:      <asp:Image ID="imgAnimal" ImageUrl="uploading.gif"
  33:          style="display:none" runat="server" />
  34:   
  35:      <asp:Button ID="btnSubmit" runat="server" Text="送出" onclick="btnSubmit_Click" />
  36:   
  37:      </form>
  38:  </body>
  39:  </html>

 

 

如上程式碼執行結果如下:

image

您可以注意到,當我選完檔案後,其實檔案已經在進行上傳了,當使用者按下Submit後才會真的儲存至Server上。所以在Submit Button的事件中我們必須撰寫一小段程式碼。如下:

   1:      bool SaveFile(byte [] b, string FileName)
   2:      {
   3:          string FilePath = Path.Combine(Path.Combine(Path.GetDirectoryName(Request.PhysicalApplicationPath), "UploadFiles"), FileName);
   4:          try
   5:          {
   6:              FileStream f = new FileStream(FilePath, FileMode.Create);
   7:              BinaryWriter w = null;
   8:              try
   9:              {
  10:                  w = new BinaryWriter(f);
  11:                  w.Write(b);
  12:                  w.Flush();
  13:                  return true;
  14:              }
  15:              finally
  16:              {
  17:                  w.Close();
  18:                  f.Close();
  19:              }
  20:          }
  21:          catch(Exception ex)
  22:          {
  23:              string message = ex.Message;
  24:              return false;
  25:          }
  26:      }
  27:   
  28:      protected void btnSubmit_Click(object sender, EventArgs e)
  29:      {
  30:          if (Page.IsValid)
  31:          {
  32:              byte[] b;
  33:              string UserName = txtUserName.Text;
  34:              if (AsyncFileUpload1.HasFile)
  35:              {
  36:                  b = AsyncFileUpload1.FileBytes;
  37:                  SaveFile(b, Path.GetFileName(AsyncFileUpload1.FileName));
  38:                  Response.Redirect("Done.aspx");
  39:              }
  40:          }
  41:      }

 

 

不過目前此元件再使用時有一些地方是需要注意的,也算是限制,有一些是目前已知的Issue:

  • 它目前無法工作在Master Page中
  • 它不能在ClientIDMode=Static的時候工作,我們知道ClientIDMode是ASP.NET 4.0中Page新增的一個功能,老實說有這個限制的話稍微遜色了些。
  • 目前不支援FireFox 4
  • 你不能在同一個Page中使用多個AsyncFileUpload
  • 還有他目前與HTML5還未做過完整相容性的測試,有可能會出現一些問題。

 

3. Animated 動畫控制項

在先前的AJAX Control ToolKit中提供的Animated 控制項並無法使用在Popup Window 中,現在可以了!這可說是一個強大的增強,它的使用方式非常的容易,如第一個Popup Window 的範例,我們只需要在ModalPopupExtender 控制項中插入一段<Animations>標籤敘述,並設定OnShow 與OnHiding 使用<Fadein />模式,就會有淡出的效果!是不是很棒呢?如下圖:

image

參考資料:

June 26th Links: ASP.NET, ASP.NET MVC, .NET and NuGet

http://weblogs.asp.net/scottgu/archive/2011/06/26/june-26th-links-asp-net-asp-net-mvc-net-and-nuget.aspx

May 2011 Release of the Ajax Control Toolkit

http://stephenwalther.com/blog/archive/2011/05/09/may-2011-release-of-the-ajax-control-toolkit.aspx

AJAX Control ToolKit (Animation Demonstration)

http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Animation/Animation.aspx

AJAX Control ToolKit (AsyncFileUpload Demonstration)

http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx


 

簽名:

學習是一趟奇妙的旅程

這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。

軟體開發之路(FB 社團)https://www.facebook.com/groups/361804473860062/

Gelis 程式設計訓練營(粉絲團)https://www.facebook.com/gelis.dev.learning/


 

如果文章對您有用,幫我點一下讚,或是點一下『我要推薦,這會讓我更有動力的為各位讀者撰寫下一篇文章。

非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^