2013-07-02 3 views
5

Was passiert, wenn Sie eine Button als DefaultButton in einem ASP.NET Panel deklarieren? Ich verstehe, dass ASP.NET den Inhalt des Panels zu einem div rendern und eine Menge Sachen an den ViewState übergeben wird. Gibt es JavaScript in ViewState, das das Click-Ereignis des gerenderten Buttons behandelt? Ich dachte ViewState war genau das - Informationen über den Zustand. Wie funktioniert es?Wie funktioniert die DefaultButton-Eigenschaft eines Panels?

+0

ViewState ist einfach ein Mittel für ASP.NET-Seiten, um Informationen zwischen Anfragen zu speichern (sozusagen von einer Seite zur anderen zu gelangen) - es wirkt sich nicht auf clientseitiges JavaScript aus oder implementiert keines –

Antwort

11

Sie haben Recht mit dem ViewState. Es wurde entwickelt, um die Werte von Page und Controls beizubehalten. Das heißt, ihr Zustand. Sie können es bestätigen here.

Über die Standardschaltfläche gibt es keine Magie. Ein JavaScript wird der div hinzugefügt, um das ENTER-Schlüsselereignis zu binden.

Lassen Sie uns es überprüfen! Dieser Code:

<asp:Panel ID="panel" runat="server" DefaultButton="button"> 
    <asp:Button ID="button" runat="server" Text="this is the button" /> 
</asp:Panel> 

ist dieser gemacht:

<div id="panel" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'button')"> 
    <input type="submit" name="button" value="this is the button" id="button">   
</div> 

Dieses Javascript von dem WebForms Motor erzeugt wird, aber wir können es suchen, wenn Sie neugierig sind:

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; 
} 

Beachten Sie, wie getestet wird, ob das aktuell fokussierte Steuerelement ein textarea ist. Dies liegt daran, dass eine ENTER innerhalb einer textarea meist eine neue Zeile ist, keine Submit.