The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

TextBox 在 MultiLine 模式時無法使用 MaxLength 屬性

用過的人都知道 TextBox 在 TextMode 屬性設定�� MultiLine 時,指定 MaxLength 是無效的,因為 TextBox 控制項在指定 TextMode="MultiLine" 時是使用 <textarea> 標籤輸出,而 <textarea> 標籤並不支援 MaxLength 屬性的關係,如果要做到這點就必須搭配 JavaScript 才能做到。

最近發現有人已經寫好了,且不只提供原始碼而已,還有很詳細的程式碼說明,有興趣的可以去看看。不過缺點是他沒提供 DLL 直接下載使用,必須要自己將原始碼抓回來編譯過才能用,我大概編譯了一下,大致說明一下編譯步驟:

1. 新增 ASP.NET Server Control

  • 專案名稱用 Annsa.Controls

2. 刪除 ServerControl1.cs

3. 加入 AnnsaTextBox.cs

4. 加入 TextBoxSupport.js

  • 在檔案屬性的地方修改 Build Action,切換到 Embedded Resource

5. 修改 Properties\AssemblyInfo.cs

  • 加入命名空間到第一行
    using System.Web.UI;
  • 加入 WebResourceAttribute 到最後一行
    [assembly: WebResourceAttribute("Annsa.Controls.TextBoxSupport.js", "text/jscript")]

6. 建置專案 ( F6 )

建置成功後就可以使用了,加入到你現有 ASP.NET 網站的流程如下:

1. 將建置完成的 Annsa.Controls.dll 複製到你網站的 Bin\ 目錄下

2. 修改 web.config 註冊你的控制項,將以下片段插入到 <system.web> / <pages> / <controls> 下

<add tagPrefix="My" namespace="Annsa.Controls" assembly="Annsa.Controls"/>

3. 在頁面中使用控制項

<My:AnnsaTextBox runat="server" ID="TextBox1" MaxLength="10" TextMode="MultiLine" />

當然你也可以設定 ASP.NET 直接用自訂的 AnnsaTextBox 取代掉原本的 TextBox 控制項,只要修改 web.config 即可,將以下片段插入到 <system.web> / <pages> 下即可:

<tagMapping>
    <add tagType="System.Web.UI.WebControls.TextBox"
         mappedTagType="Annsa.Controls.AnnsaTextBox" />
</tagMapping>

這樣就一勞永逸啦,原本的程式一行都不用改喔!

相關連結