+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: ASP.NET: Limitare il numero caratteri in textbox

  1. #1
    L'avatar di luciano.net
    luciano.net non è in linea Scolaretto
    Luogo
    Roma
    Post
    475

    ASP.NET: Limitare il numero caratteri in textbox

    Sembra che la proprietà MaxLength in una textbox con
    TextMode="MultiLine" non produca alcun effetto.
    C'è una soluzione per limitare il numero di caratteri immessi dall'utente?

    Luciano

  2. #2
    L'avatar di bottomap
    bottomap non è in linea Moderatore Globale
    Post
    4,130
    Ciao Luciano,

    Come hai notato la MaxLenght non funziona sui multi-line. Visto che l'immissione del testo avviene lato client, l'unico sistema è attaccare alla textbox un evento onkeydown/onkeypress e gestire li l'evento legato alla pressione di un nuovo carattere (la validazione lato server, comunque necessaria, non potrebbe impedire all'utente di inserire più dati di quanti tu ne voglia ricevere).

    Un esempio che toglie il carattere di troppo (ma hai un carattere che appare e immediatamente scompare - implementazione basilare): Dynamic Drive DHTML scripts- Textarea Maxlength script

    Un esempio più articolato che si appoggia ad un js e non ha il problema del carattere che appare e scompare:Dynamic Drive DHTML scripts- Form field Limiter v2.0

    Validare con un'espressione regolare ( ^[\s\S]{0,N}$ , con N=massimo numero di caratteri) ti permetterebbe di effettuare la pulitura sia lato client (con javascript) che lato server con la stessa espressione (prevenendo eventuali malintenzionati che riescono a mandarti troppi dati).

    Ciaociao


    Venite a farmi un saluto su http://www.bottomap.com/

    - Come porre domande in modo intelligente
    - Hai mai dato un'occhiata al
    Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo...
    - Il Crossposting è vietato dalla Netiquette.

    "Solo Puffin ti darà forza e grinta a volontà" - Charlie O'Brian
    "I gatti sono animali verso cui ho il massimo rispetto. I gatti e i non conformisti mi sembrano davvero i soli esseri in questo mondo che abbiano una coscienza pratica e attiva" - Jerome K. Jerome
    "Dun Dun DUNNN!" - Capitan Caos
    (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato)

  3. #3
    L'avatar di luciano.net
    luciano.net non è in linea Scolaretto
    Luogo
    Roma
    Post
    475
    Il mio caso è piuttosto complesso.
    Innanzi tutto si tratta di una web form con master mpage, e la <form> si trova nella master page, per questo non saprei come far riferimento a tale oggetto <form> in un javascript della web form.
    Il secondo problema è che si tratta di un textbox asp.net e non di una textarea, e non saprei come adattare il codice javascript.

    Nel frattempo ho fatto una prima prova:
    codice:
    <asp:TextBox ID="TextBox1" runat="server" Width="320px"
    TextMode="MultiLine" Height="80" />
    <asp:RegularExpressionValidator
    ID="vld1" ControlToValidate="TextBox1" runat="server" ErrorMessage="Troppi caratteri!"
    ValidationExpression="^[\s\S]{0,10}$" />
    


    e funziona, ma restano tre problemi:
    1. la compatibilità con i browser
    2. il funzionamento con javascript disabilitato
    3. il fatto che il messaggio appare solo dopo che si esce dalla texbox, quando l'utente magari ha digitato molti più caratteri di quelli consentiti.
    Per i primi due potrei effettuare il controllo anche lato server sul submit della pagina, è corretto?
    Il terzo me lo tengo...

  4. #4
    L'avatar di bottomap
    bottomap non è in linea Moderatore Globale
    Post
    4,130
    Ciao,

    Per i primi due dovresti comunque effettuare il controllo lato server... aggirare la maxlength con una paginetta creata ad-hoc non sarebbe complicato per un malintenzionato.
    Per la compatibilità cross-browser, mi pare che il codice usato sia compatibile con la maggior parte dei browser (vie usato un addEventListener o una attachEvent proprio per garantire la compatibilità ed in generale prima di richiamare una funzione del document o di altri oggetti viene sempre verificata l'esistenza - if(e.preventDefault)e.preventDefault();).

    Per quanto riguarda la soluzione con il .js esterno (la seconda) dovrebbe essere più che applicabile anche al tuo caso.
    Nel fieldlimiter.setup, oltre a specificare una document.nomeform.nomecontrollo, puoi anche scrivere qualcosa tipo document.getElementById('TextBox1') e, ammesso che gli id siano univoci e che la textbox sia nello stesso document del codice javascript (ossia non in una altra iframe o frame) dovresti poterlo utilizzare senza problemi sulla tua textbox...

    Non sono esperto di asp, ma il terzo punto dovrebbe derivare con ottima probabilità dal fatto che il validatore è attaccato all'evento onchange e non all'onkeydown o onkeypress... se c'è il modo (via attributo specifico o altro sistema) di farlo entrare in funzione ad ogni pressione di tasto, dovresti risolvere anche con quello che hai scritto.

    Ciaociao


    Venite a farmi un saluto su http://www.bottomap.com/

    - Come porre domande in modo intelligente
    - Hai mai dato un'occhiata al
    Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo...
    - Il Crossposting è vietato dalla Netiquette.

    "Solo Puffin ti darà forza e grinta a volontà" - Charlie O'Brian
    "I gatti sono animali verso cui ho il massimo rispetto. I gatti e i non conformisti mi sembrano davvero i soli esseri in questo mondo che abbiano una coscienza pratica e attiva" - Jerome K. Jerome
    "Dun Dun DUNNN!" - Capitan Caos
    (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato)

  5. #5
    L'avatar di luciano.net
    luciano.net non è in linea Scolaretto
    Luogo
    Roma
    Post
    475
    La soluzione javascript esterno è comunque quella che mi piace di più, provo a fare un test.
    Grazie.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi