Domanda

Sto aggiungendo caselle di testo (non un numero fisso di caselle di testo) in modo dinamico a un modulo nella pagina ASP.NET, come posso leggere i dati da queste caselle di testo?

È stato utile?

Soluzione

Supponendo che tu voglia accedere ai controlli sul postback, probabilmente ricreassi i controlli dinamici esattamente come sono stati creati sul caricamento iniziale, quindi utilizzate il metodo FindControls della pagina per trovare i controlli. Probabilmente sarebbe utile creare le caselle di testo con ID come Textbox1, Textbox2, ecc.

Altri suggerimenti

Guarda Request.Params ed estraili da lì. Ovviamente, dovrai fornire loro gli ID per poterli distinguere.

Da tutte le app ASP.NET con cui ho lavorato, a .NET piace usare il seguente algoritmo durante la generazione dell'ID per i controlli del server:

ctl00$cphBody$[ControlID]

Prova a utilizzare questo algoritmo quando accedi ai tuoi dati dalle caselle di testo generate dinamicamente.

Quando li aggiungi dovresti dare loro nomi / ID e puoi usarli per fare riferimento a loro.

Altrimenti, cammina il tuo DOM in javascript per trovarli all'interno del modulo che hai creato: saranno nello stesso ordine in cui li hai inseriti.

Infine, sono tutti disponibili come input post / get alla tua pagina, quindi dovresti essere in grado di guardarli tutti fino a quando hai assegnato loro nomi diversi.

-Adam

Quando si creano caselle di testo in modo dinamico (presumibilmente usando JavaScript, ma lo stesso vale per i controlli ASP.NET) assegnare loro i nomi in uno schema specifico. Quello che sarai in grado di riconoscere in seguito.

Sul lato server, in ogni caso il gestore di eventi che si verifica dopo Page_Init è possibile scorrere < Request.Form collezione.

Non essere tentato di utilizzare Request.Param perché può essere utilizzato per applicare falsificazioni di richieste tra siti sull'applicazione (un utente malintenzionato potrebbe indurre l'utente a emettere una richiesta GET che l'applicazione interpreterebbe come se interpretasse un POST uno, che di solito non è una buona cosa).

Se stai aggiungendo controlli ASP.NET dinamici (ad esempio in Page_Render) puoi anche ricostruire i controlli e usare le loro proprietà.

È possibile utilizzare FindControl e passare l'ID della casella di testo per ottenere un'istanza della casella di testo quando si ripone. La proprietà Text contiene i dati, dato che siamo nella fase di caricamento della pagina o più avanti nel ciclo. Quando si aggiungono controlli dinamici, sovrascrivere il metodo CreateChildControls e aggiungere i controlli dinamici per controllare la gerarchia in questa fase del ciclo.

Ricorda che in ASP.Net ogni postback è una nuova istanza della tua classe. Se hai creato questi controlli durante un precedente postback o nella prima vista, sono stati raccolti in modo inutile con il resto dell'istanza precedente. Quindi, per utilizzare i controlli in questa nuova istanza, è necessario crearli di nuovo. Se hai bisogno di caricare le informazioni sullo stato per quei controlli (incluso qualsiasi valore inserito dall'utente), devi anche creare prima il viewstate viene caricato, il che significa che lo fai durante l'evento Init, piuttosto che evento di caricamento.

Per creare controlli dinamici, di solito utilizzare un controllo PlaceHolder ASP.NET e aggiungere i controlli dinamici a questo contenitore.

Darei a ciascun controllo dinamico un ID.

Successivamente puoi utilizzare FindControl su PlaceHolder per accedere ai controlli dinamici.

Dico " controlli dinamici " per indicare i controlli aggiunti in fase di esecuzione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top