Che cosa accade quando si dichiara uno da utilizzare come DefaultButton
in un ASP.NET Panel
? Capisco che ASP.NET renderà il contenuto del Pannello su un div
e passerà un sacco di cose al ViewState. C'è JavaScript nel ViewState che gestisce l'evento click del pulsante reso? Pensavo che ViewState fosse proprio questo: informazioni sullo stato. Come funziona?Come funziona la proprietà DefaultButton di un pannello?
5
A
risposta
11
Hai ragione riguardo a ViewState. È progettato per mantenere i valori di Page e Controlli. Cioè, il loro stato . Puoi confermarlo here.
Informazioni sul pulsante predefinito, non c'è magia. Un javascript è aggiunto allo div
per associare l'evento del tasto ENTER.
Controlliamo! Questo codice:
<asp:Panel ID="panel" runat="server" DefaultButton="button">
<asp:Button ID="button" runat="server" Text="this is the button" />
</asp:Panel>
è reso a questo:
<div id="panel" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'button')">
<input type="submit" name="button" value="this is the button" id="button">
</div>
Questo javascript è generato dal motore WebForms, ma possiamo cercarlo, se siete curiosi:
function WebForm_FireDefaultButton(event, target) {
if (event.keyCode == 13) {
var src = event.srcElement || event.target;
if (!src || (src.tagName.toLowerCase() != "textarea")) {
var defaultButton;
if (__nonMSDOMBrowser) {
defaultButton = document.getElementById(target);
}
else {
defaultButton = document.all[target];
}
if (defaultButton && typeof(defaultButton.click) != "undefined") {
defaultButton.click();
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
}
}
return true;
}
Notate come verifica se il controllo attualmente focalizzato è un textarea
. Questo perché un INVIO all'interno di un textarea
è principalmente una nuova riga, non un invio.
ViewState è semplicemente un mezzo per le pagine ASP.NET per conservare le informazioni tra le richieste (ottenendo da una pagina all'altra per così dire) - non influisce sul lato client di JavaScript o implementare qualsiasi –