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

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

最近發現[有人](https://web.archive.org/web/20160117052356/http://www.annsa.com/code/textbox/textbox.aspx)已經寫好了，且不只提供原始碼而已，還有很詳細的程式碼說明，有興趣的可以去看看。不過缺點是他沒提供 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>
```

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

**相關連結**

-   [A MaxLength compliant Multiline Textbox Control in ASP.NET 2.0](https://web.archive.org/web/20160117052356/http://www.annsa.com/code/textbox/textbox.aspx)
