jquery append + code-behind
-
07-07-2019 - |
Domanda
Aggiungo dinamicamente le righe a divStaff usando jquery:
$("span[id$='lblAddStaff']").click(function() {
//$(".staff_tpl").find("input[id$='txtRate']").val("0,00");
var staff_row = $(".staff_tpl");
staff_row.find(".staff_row").attr("id", "Emp" + counter);
$("div[id$='divStaff']").append(staff_row.html());
counter += 1;
});
la riga che sto aggiungendo è all'interno del div nascosto con class = " .staff_tpl " Aggiungo il contenuto di questo div a divStaff
Quando invio la pagina (postback), il divStaff risultante è sempre vuoto se provo a visualizzarla in questo modo:
lblTest.Text = divStaff.innerHtml.ToString
fondamentalmente, sto manipolando un lato client div e voglio accedervi lato server tramite il code-behind della mia pagina aspx. Penso che qui manchi un principio di base.
Soluzione
Non è possibile farlo.
Se si desidera accedere ai dati creati nella pagina, è necessario posizionarli all'interno dei campi di input (possibilmente nascosti) e accedervi dopo che sono stati pubblicati utilizzando Request.Form["MyHiddenFieldName"]
.
<div>
non sono pubblicati sul server. runat="server"
gli elementi sono codificati in ViewState (una grande stringa, davvero - puoi vederlo nella fonte della tua pagina), dando l'astrazione della continuità (o l'illusione di esso). Tuttavia, quella puntura non è a conoscenza delle modifiche apportate nel DOM.
Quando si tratta di <input>
elementi, vedrai le ultime modifiche che hai apportato sul lato server , ma le modifiche sul lato client sono sparite.
Solo i valori <=> (e area di testo, opzioni, ecc.) vengono inviati al server al momento dell'invio, quindi la modifica di questi sul client verrà visualizzata sul server dopo che la pagina è stata pubblicata.