2011/12/17

[Asp.net] - TextBox.MaxLength在 MultiLine下無效果

最近在做TextBox限制長度大小時, 很開心的使用多行的功能時,又寫了限制字數的大小

詭異的事情發生了!!怎麼還是可以打超過字元...我明明寫了MaxLength="10"

不死心的在瀏覽模式下檢視原始碼...

竟然發現TextBox轉譯成TextArea格式,而且MaxLength這個屬性不見了!!


又比對了沒有下TextMode="MultiLine"屬性的結果,

TextBox轉成了input,而且 MaxLength有出現!!!


後來上網查了資料才知道已經有許多先進遇到這種詭譎的問題了!

後來推測是因為.net在轉換Html時,如果是多行模式會轉成TextArea這個標籤

而TextArea本身沒有提供MaxLength屬性,

解決的方法有二:
1.一位保哥的Blog,提供修改過的TextBox物件,可以在MultiLine模式下提供字元限字的方法

2.使用JavaScript來做Client的控管,個人比較偏好這個,簡單明瞭。

function ismaxlength(obj){
  var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : "";
  if (obj.getAttribute && obj.value.length>mlength)
    obj.value=obj.value.substring(0,mlength);
}

後端程式要加上下面兩行
  TextBox1.Attributes.Add("maxlength", "200");
//給TextArea maxlength屬性,目前測試是沒辦法直接在TextBox上加
//.net不會把maxlength屬性加上到TextArea標籤上
  TextBox1.Attributes.Add("onkeyup", "return ismaxlength(this)");


這樣就大功告成囉~!

0 意見:

張貼意見