2013-07-02 8 views
5

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?

+0

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 –

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.