Domanda

Ho un modulo asp.net che contiene campi. Quando accedo a questa finestra, le mie funzioni javascript possono accedere ai campi tramite il DOM con il metodo getElementById () e quando postpacco sul server ricevo gli aggiornamenti effettuati dal client.

Tuttavia, quando avvio il modulo come finestra figlio utilizzando il controllo RadWindow di Telerik, il javascript non può accedere ai campi nascosti nel modulo figlio. Invece ottengo null.

Le mie domande sono:

  1. Sono campi nascosti in una finestra figlio non accessibile quando la finestra è lanciato da un modulo asp.net padre?
  2. Qualcuno ha provato a farlo con i controlli di Telerik e ha riscontrato problemi?

Modifica Craig ha sottolineato che l'id potrebbe essere diverso. Altre due domande quindi:

  1. Potete assicurarvi che l'id assegnato al server sia effettivamente utilizzato?
  2. L'uso di getElementByName () è un meccanismo migliore per accedere agli elementi DOM?
È stato utile?

Soluzione

Per ottenere l'ID del tuo controllo asp.net fai qualcosa del genere:

<%= theControl.ClientID %>

getElementByName non è così comunemente usato come getElementById. L'attributo ID dovrebbe essere univoco per ogni elemento della pagina, mentre l'attributo name può essere duplicato.

Altri suggerimenti

È del tutto possibile che l'ID dell'elemento non sia quello che pensi che sia. Controlla la pagina renderizzata e vedi se l'ID è lì. Immagino che alla pagina venga assegnato un ID diverso poiché viene visualizzato all'interno di un altro controllo.

In tal caso, è possibile fare in modo che il modulo esegua il rendering di alcuni script che restituiscono l'ID elemento accedendo all'ID client dei controlli.

David, ti invio questa risposta perché ho riscontrato lo stesso problema nel mio codice e l'unica soluzione REALE che ho trovato è stata che dovevo supportare il "quot" OnClick " funzione in due posti ... Nel mio caso, stavo usando PetersDatePackage, ma era su una striscia RAD Telerik.

Nel mio caso, il controllo era su una pagina .ascx e il codice JS era il seguente:

function OnIncidentDateChange(ctrl, dtDate, bErr)
{
    var weekday = new Array(7);
    weekday[0] = "Sunday";
    weekday[1] = "Monday";
    weekday[2] = "Tuesday";
    weekday[3] = "Wednesday";
    weekday[4] = "Thursday";
    weekday[5] = "Friday";
    weekday[6] = "Saturday";

    <%=LabelDayOfWeek.ClientID %>.innerText = weekday[dtDate.getDay()];
}

Ma questo non è bastato. Ho dovuto aggiungere QUESTO codice alla mia pagina principale. La pagina che contiene i controlli per la striscia di Telerik.

// Dummy function?
function OnIncidentDateChange()
{
}

Una volta che l'ho fatto, ha funzionato ...

Non sono sicuro del perché, a dirti la verità, e non ha senso per me, e potrebbe essere solo un problema con il pacchetto PDP ...

Uso getElementsByName per le caselle di controllo all'interno dello stesso gruppo.

Per quanto riguarda l'ID del controllo, TonyB ha l'idea giusta, ma assicurati di fare riferimento alla proprietà ClientID nel gestore eventi PreRender, perché se lo fai troppo presto nel ciclo di vita della pagina, non sarà ancora disponibile) .

È possibile che javascript stia cercando di ottenere un riferimento al campo nascosto prima che RadWindow lo abbia caricato? Credo di essermi imbattuto in questo in precedenza e ho dovuto usare setTimeout per aggirare il problema.

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