Das HiddenField-Steuerelement ist, wie der Name schon sagt, ein Serversteuerelement, das Eingabefelder verbirgt. Es ermöglicht das Speichern von Daten, die nicht auf der Seite angezeigt werden müssen und keine hohe Sicherheit erfordern. Vielleicht sollte es zu diesem Zeitpunkt eine Frage geben: Warum müssen wir HiddenField immer noch verwenden, wenn wir über Statusspeichermechanismen wie ViewState, Session und Cookie verfügen?
Der Zweck des Hinzufügens von HiddenField besteht darin, die Anwendung des gesamten Zustandsverwaltungsmechanismus umfassender zu gestalten. Denn unabhängig davon, ob es sich um ViewState, Cookie oder Session handelt, wird es eine Zeit geben, in der es abläuft. Beispielsweise muss der Benutzer ViewState aufgrund bestimmter Anforderungen auf „false“ setzen, oder Umgebungsbedingungen schränken die Verwendung von Cookies ein oder der Benutzer war inaktiv für eine lange Zeit, wodurch die Sitzung abläuft usw. Zu diesem Zeitpunkt ist HiddenField zweifellos die beste Wahl.
Die Funktion des HiddenField-Steuerelements besteht lediglich darin, die Werte zu speichern, die zwischen dem Senden an den Server beibehalten werden müssen. Es wird als <input type="hidden"/>-Element gerendert und kann durch Hinzufügen von runat="server" in ein Standard-HTML-Serversteuerelement umgewandelt werden. Nachfolgend sind die Eigenschaften und Ereignisse aufgeführt, die für das ASP.NET HiddenField-Webserversteuerelement verfügbar sind.
<asp:HiddenField
EnableTheming="True|False"
EnableViewState="True|False"
ID="string"
OnDataBinding="DataBinding-Ereignishandler"
OnDisposed="Disponierter Ereignishandler"
OnInit="Init-Ereignishandler"
OnLoad="Ereignishandler laden"
OnPreRender="PreRender-Ereignishandler"
OnUnload="Ereignishandler entladen"
OnValueChanged="ValueChanged-Ereignishandler"
runat="server"
SkinID="string"
Wert="string"
Sichtbar="Wahr|Falsch"
/>
Da der HiddenField-Wert im Client-Browser gerendert wird, eignet er sich nicht zum Speichern sicherheitsrelevanter Werte. Um einen Wert für das HiddenField-Steuerelement anzugeben, verwenden Sie die Value-Eigenschaft. Beachten Sie, dass es sich um Value und nicht um Text handelt. Tatsächlich verfügt HiddenField nicht über eine Text-Eigenschaft, was mit der Eigenschaftsbenennung von Standardschaltflächen wie DropDownList und CheckBoxList übereinstimmt. Bei der Standardmethode zur Benennung von Eigenschaften wird dem Benutzer der Wert von Text angezeigt, während der Wert von Value durch Code gesteuert wird. Sie können beispielsweise festlegen, dass die Text-Eigenschaft der DropDownList den Namen des Benutzers anzeigt und ihr Wert die Nummer des Benutzers speichert.
Der folgende Code zeigt die grundlegende Verwendung des Steuerelements.
<html>
<Kopf>
<script language="C#" runat="server">
void Button1_Click(object sender, EventArgs e)
{
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "0";
HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value)+1).ToString();
Label1.Text = HiddenField1.Value;
}
</script>
</head>
<Körper>
<h3><font face="Verdana">HiddenField</font></h3>
<form runat=server>
<asp:HiddenField id=HiddenField1 runat=Server />
<asp:Button id=Button1 Text="Klicken Sie auf die Schaltfläche" onclick="Button1_Click" runat="server" />
<asp:Label id=Label1 Text="0" runat=server /> Mal angeklickt
</form>
</body>
</html>
Im obigen Code definiert <asp:HiddenField id=HiddenField1 runat=Server /> ein verstecktes Steuerelement, das die Anzahl der Benutzerklicks im Klickereignis der Schaltfläche zählt und die Anzahl der Änderungen Label1 zuweist.
Sie können <asp:HiddenField id=HiddenField1 runat=Server /> im obigen Code in <input type=hidden id=HiddenField1 runat=Server> ändern. Es ist auch möglich
, den obigen Code zu verwenden browser Der Code erhält die folgenden Informationen:
<form name="Form1" method="post" action="Default.aspx" id="Form1">
Dies liegt daran, dass HiddenField Daten über das HTTP-Protokoll überträgt. Wenn Sie also eine neue Formularseite über „method="get" oder einen Link öffnen, ist HiddenField nicht verfügbar.
Darüber hinaus ersetzt HiddenField nicht die Sitzung, um den Status beizubehalten. Obwohl Sie im obigen Beispiel einmal auf die Schaltfläche klicken, um die Anzahl der Klicks anzuzeigen, bedeutet dies nicht, dass Ihre Statusinformationen aufgezeichnet werden können. Wenn Sie den Browser erneut öffnen, wird hier immer noch 0 statt 3 angezeigt.
HiddenField-Ereignis
Das am häufigsten verwendete HiddenField ist das ValueChanged-Ereignis, das ausgelöst wird, wenn sich der Wert ändert. Bei der tatsächlichen Verwendung müssen Sie jedoch die Reihenfolge der Seitenaufzeichnung kennen. Während des Seiten-Postback-Prozesses können Sie den spezifischen Seitenzyklus auf der folgenden Website überprüfen
http://msdn2.microsoft.com/zh-cn/library/ms178472.aspx
Das folgende Beispiel veranschaulicht dieses Problem
<head>
<script runat="server" language="c#">
protected void Page_Load(object sender, EventArgs e)
{ Response.Write("<p>Das Page_Load-Ereignis der Seite wird ausgelöst und die Auslösezeit ist: " + DateTime.Now.ToString());
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "0"; }
protected void Button1_Click(object sender, EventArgs e)
{ Response.Write("<p>Button1_Click ist ein Ereignis, das vor dem Ändern des Werts von Hidden ausgelöst wird. Die Auslösezeit ist: " + DateTime.Now .ToString( ));
HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString();
Label1.Text = HiddenField1.Value;
}
protected void HiddenField1_ValueChanged(object sender, EventArgs e)
{ Response.Write("<p>Das ValueChanged-Ereignis von HiddenField wird ausgelöst und die Auslösezeit ist: " + DateTime.Now.ToString()) ; }
</script>
</head>
<body>
<form id="form1" runat="server">
<div> <asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" />
</div> <asp :Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text=" Schaltfläche" />
</form></body>
</html>
In diesem Beispiel ist das gewünschte Ergebnis: Wenn der Benutzer auf die Schaltfläche klickt, wird der Wert von HiddenField1 durch das Button1_Click-Ereignis der Schaltfläche geändert und dann wird das HiddenField1_ValueChanged-Ereignis von HiddenField1 ausgelöst. Ist das jedoch wirklich der Fall?
Führen Sie den obigen Code aus und erhalten Sie das Ergebnis. Wie Sie sehen, ändert der Button den Wert des HiddenField jedes Mal, wenn er angeklickt wird, aber die Ausgabe, die wir in HiddenField1_ValueChanged definiert haben, wird nicht ausgeführt Um dieses Problem zu verstehen, müssen Sie auch den Deklarationszyklus der Seite verstehen. Während des Seitenzyklus können Sie sehen, dass die Steuerelementeigenschaften in Page_Init und dann in Steuerelementereignissen gelesen werden.
Das Ereignis hier bedeutet: Im Page_Init-Ereignis akzeptiert die Webseite die vom Benutzer zurückgegebenen Daten, weist beispielsweise <span id="Label1">Label</span> dem Textattribut mit der ID Label1 und <input zu Typ Der Wert von ="hidden" name="HiddenField1" id="HiddenField1" value="0" /> wird der Value-Eigenschaft von HiddenField1 zugewiesen. Nachdem die gesamte Initialisierung abgeschlossen ist, beginnt die Seite mit der Ausführung des Steuerereignis „Button1_Click“ und ändert den Wert des HiddenField im Button-Ereignis. Warum wird das ValueChanged-Ereignis nicht ausgeführt, da der Wert hier geändert wurde?
Obwohl der Wert hier geändert wurde, wird er zu diesem Zeitpunkt in Page_Init gespeichert. Dies liegt daran, dass beim Klicken auf die Schaltfläche „HiddenField“ auch die Antwort der Seite erneut ausgelöst wird, d vorheriger HiddenValue Der Wert ist 0, und dieses Mal wird sein Wert auf 1 geändert. Da ViewState jedoch nach dem Zurücksenden der Seite die letzte Installation speichert (hier ist 1), wird in Page_Init der Anfangswert von HiddenField berücksichtigt 1 sein, und dieses Mal sind die Zeiten immer noch 1, was den Eindruck erweckt, dass sich die Daten nicht geändert haben, sodass das ValueChanged-Ereignis immer noch nicht ausgelöst wird.
Natürlich können Sie HiddenField für die Verarbeitung deaktivieren und ValueChanged ausführen Ereignis, aber tatsächlich speichert die Seite nach dem Deaktivieren von ViewState den Wert von ViewState nicht mehr, sodass die Seite davon ausgeht, dass jede Anforderung für HiddenField neu ist, wie zum Beispiel der folgende Code:
Sie haben den Hiddenfield-Wert nicht geändert, aber er wird trotzdem jedes Mal ausgeführt.
<%@ Page EnableViewState="false" %>
<Kopf>
<script runat="server" language="c#">
protected void Page_Load(object sender, EventArgs e)
{
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "111"
}
protected void Button1_Click(object sender, EventArgs e)
{ // HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString();
Label1.Text = TextBox1.Text; }
protected void HiddenField1_ValueChanged(object sender, EventArgs e)
{ Response.Write("Changed." + DateTime.Now.ToString());
Response.Write(HiddenField1.Value);
Response.Write(TextBox1.Text); }
</script>
</head>
<body>
<form id="form1" runat="server"> <div>
<asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" />
</div>
<asp:Label ID= „Label1“ runat="server" Text="Label"></asp:Label>
<br />
<asp:TextBox runat=server ID=TextBox1></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
</body >
</html>
Durch die Verwendung von HiddenFile in Kombination mit der von ASP.NET2.0 bereitgestellten Seite „Cross Page“ kann die Übertragung von Seitendaten wie folgt erfolgen:
Auf einer Registrierungsseite muss der Benutzer Daten eingeben. Da sich in der Bemerkungsspalte möglicherweise viele Daten befinden, kann in einem neuen Fenster ein Steuerelement ähnlich der FreeTextBox verwendet werden, um dem Benutzer die Formatierung des Textes und nach der Eingabe zu ermöglichen Wenn der Vorgang abgeschlossen ist, kehren Sie zur ursprünglichen Registrierungsseite zurück. In Bezug auf diese Situation werden wir sie später vorstellen