Postoji "okolno" resenje i za multiline textbox, a problem nastaje iz razloga sto se multiline textbox na klijentu renderuje kao TextArea, a ne kao Input type=text. E dakle da bi dodao funcionalnost MaxLegth na TextArea (multi line text box) predlazem sledece:
1. Na serveru "uhvatiti" kontrolu ili instancirati novu i dodati je kasnije na stranu kodom:
Code:
Dim intLegth as Integer = 200
Dim txt As New TextBox
txt.TextMode = TextBoxMode.MultiLine
txt.Attributes.Add("onkeypress", "doKeypress(this);")
txt.Attributes.Add("onbeforepaste", "doBeforePaste(this);")
txt.Attributes.Add("onpaste", "doPaste(this);")
txt.Attributes.Add("maxLength", intLegth)
txt.Attributes.Add("onselect", txtOf.ClientID & ".focus();if(document.selection.createRange().text==" & txtOf.ClientID & ".value){" & txtOf.ClientID & ".focus()}")
2. A u klijentskom delu ukljuciti sledeci kod ili ga dodati sa serverske strane uz pomoc ClientScript.RegisterClientScriptBlock metoda:
Code:
// Keep user from entering more than maxLength characters
function doKeypress(control){
maxLength = control.attributes["maxLength"].value;
value = control.value;
if(maxLength && value.length > maxLength-1){
event.returnValue = false;
maxLength = parseInt(maxLength);
}
}
// Cancel default behavior
function doBeforePaste(control){
maxLength = control.attributes["maxLength"].value;
if(maxLength)
{
event.returnValue = false;
}
}
// Cancel default behavior and create a new paste routine
function doPaste(control){
maxLength = control.attributes["maxLength"].value;
value = control.value;
if(maxLength){
event.returnValue = false;
maxLength = parseInt(maxLength);
var oTR = control.document.selection.createRange();
var iInsertLength = maxLength - value.length + oTR.text.length;
var sData = window.clipboardData.getData("Text").substr(0,iInsertLength);
oTR.text = sData;
}
}
Hmm, ovaj handling za paste je malo zbunjujuc i nisam ga detaljno testirao, ali bi trebalo da radi.
Nadam se da ce biti od pomoci. Cheers !
me.Kill()