generare dinamicamente campi usando jquery e renderli anche lato server su asp.net
-
08-07-2019 - |
Domanda
Ciao, questa può sembrare una domanda strana, ma ecco la mia situazione:
Ho un modulo in cui l'utente può fare clic e aggiungere righe che contengono determinati campi di input. Questo è fatto rigorosamente sul lato client usando JQuery. Posso accedere ai valori di input sul postback sul lato asp.net usando Request.Form e il nome dei campi, il che va bene. Il problema è quando la pagina torna indietro, i campi ovviamente scompaiono. Quindi non ho modo di convalidare gli errori o altre cose. Quali sono le mie possibili soluzioni qui? Devo generare dinamicamente i campi corrispondenti sul lato server quando si verifica il postback e inserire i valori già letti nei campi generati dal lato client in modo che sia trasparente per gli utenti? È un modo per fare le cose? C'è un modo migliore?
Stavo pensando di aggiungere un metodo ajax sul lato server che restituirebbe informazioni di convalida e potrei usarlo per segnalare errori o cosa non sul lato client senza mai postare indietro, ma il pulsante che causa il postback è il " & prossimo quot; e ne ho bisogno per andare alla pagina successiva se non ci sono errori.
Sto cercando ulteriori approfondimenti che qualcuno potrebbe avere e pro e contro degli approcci.
Grazie
Soluzione
Se vuoi aggiungere campi di input in modo dinamico, dovrai mantenere un hash sul lato server dei campi appena aggiunti e ri-istanziarli in Page_Init in modo che possano persistere tra i postback.
Penso che la tua idea AJAX sia buona:
- chiama un metodo sul lato server tramite jQuery (questo può essere un metodo statico sulla tua pagina aspx). Il metodo sul lato server aggiunge un valore di stringa a una sessione
List<String>
memorizzata. - Chiedi al metodo di restituire il valore stringa, che è l'ID dell'elemento da aggiungere alla pagina.
- Aggiungi gli elementi alla tua pagina con jQuery.
- Utilizza la variabile di sessione per reintegrare i campi aggiunti dinamicamente al postback.
Questo metodo ti dà la velocità di aggiungere i campi sul lato client e impedisce ai campi dinamici di scomparire al postback.
Altri suggerimenti
1) Veloce e sporco, potresti usare un UpdatePanel, ma ciò aumenterebbe un po 'le dimensioni del traffico. Ti consentirebbe di includere i controlli di convalida inviando di nuovo l'intero markup per la tabella.
2) È possibile utilizzare un tipo di CustomValidator o un metodo di convalida personalizzato e utilizzare semplicemente i valori Request.Form. Finché hai un modo per identificare i campi dovresti essere in grado di risolverlo, ma dovrai ricreare la scena se il postback fallisce poiché perderai quelle parti.
3) Potresti fare l'intero " postback " tramite una chiamata WebMethod e gestire tutto manualmente. Questo è probabilmente il modo più pulito per farlo dal momento che stai mescolando e abbinando le cose tradizionali WebForms con un modello più lato client.