In früheren ASP.NET 1.x-Versionen konnte das auf ReadOnly festgelegte TextBox-Steuerelement den geänderten Wert auf der Serverseite weiterhin abrufen, nachdem der Wert auf der Clientseite geändert wurde. In ASP.NET 2.0 war diese Vorgehensweise jedoch eingeschränkt. . Dies dient vermutlich der Verbesserung der Anwendungssicherheit. Das Folgende ist die interne Methode des TextBox-Steuerelements zum Abrufen von Daten, anhand derer wir die Einschränkungen von ReadOnly erkennen können:
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
base.ValidateEvent(postDataKey);
string text1 = this.Text;
string text2 = postCollection[postDataKey];
if (!this.ReadOnly && !text1.Equals(text2, StringComparison.Ordinal))
{
this.Text = text2;
return true;
}
return false;
}
Was hier eingeschränkt ist, ist nur das Text-Attribut, und es gibt keine Einschränkung für die NameValueCollection des Namens/Werts der übermittelten Daten. Daher kann der Wert weiterhin über die Methode Request["Form Name"] abgerufen werden. Das folgende Beispiel veranschaulicht diesen Punkt vollständig und bietet eine Möglichkeit, ReadOnly zu verwenden und den Wert über die Text-Eigenschaft abzurufen:
<%@ Page Language="C#" EnableViewState="false" %>
<!DOCTYPE html PUBLIC "-/ /W3C/
/
)
{
Response.Write("<li>TextBox1 = " + TextBox1.Text);
Response.Write("<li>TextBox2 = " + TextBox2.Text);
Response.Write("<li>TextBox3 = " + TextBox3.Text);
Response.Write("<li>Request.Form[TextBox1] = " + Request.Form[TextBox1.UniqueID]);
Response.Write("<li>Request.Form[TextBox2] = " + Request.Form[TextBox2.UniqueID]);
Response.Write("<li>Request.Form[TextBox3] = " + Request.Form[TextBox3.UniqueID]);
}
protected void Page_Load(object sender, EventArgs e)
{
TextBox3.Attributes.Add("readonly", "readonly");
}
</script>
<script type="text/javascript">
//<![CDATA[
Funktion SetNewValue()
{
document.getElementById('<%=TextBox1.ClientID %>').value = "TextBox1 neuer Wert";
document.getElementById('<%=TextBox2.ClientID %>').value = "TextBox2 neuer Wert";
document.getElementById('<%=TextBox3.ClientID %>').value = "TextBox3 neuer Wert";
}
//]]>
</script>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head runat="server">
<title>TextBox-Steuerelement und ReadOnly- und Enabled-Eigenschaften in ASP.NET 2.0</title>
</Kopf>
<Körper>
<form id="form1" runat="server">
<span>TextBox1 ReadOnly:</span>
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" Text="TextBox1 Alter Wert"></asp:TextBox><br />
<span>TextBox2 aktiviert:</span>
<asp:TextBox ID="TextBox2" runat="server" Enabled="False" Text="TextBox2 Old Value"></asp:TextBox><br />
<span>TextBox3 ReadOnly:</span>
<asp:TextBox ID="TextBox3" runat="server" Text="TextBox3 Alter Wert"></asp:TextBox><br />
<br />
<asp:Button ID="Button2" runat="server" Text="Neuen Wert ändern" OnClientClick="SetNewValue();return false;" />
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
</form>
</Körper>
</html>
Für deaktivierte TextBox kann der geänderte Wert nicht auf der Serverseite abgerufen werden. Wenn Sie dieses Attribut wirklich verwenden möchten, verwenden Sie die Methode zum Ausblenden des Formularfelds, um dies zu erreichen.
Die TextBox mit dem Attribut „ReadOnly“ wird auf der Clientseite als eine solche Markierung angezeigt:
<input readonly = „readonly“>
Die TextBox mit dem Attribut „Enabled“ wird auf der Clientseite als eine solche Markierung angezeigt: <input invalid="disabled ">
Gemäß den W3C-Spezifikationen: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12
Eingabe, die auf deaktiviert gesetzt ist, hat die folgenden Einschränkungen:
· Fokus kann nicht empfangen werden · Wird übersprungen bei Verwendung der Tabulatortaste · Möglicherweise nicht. Erfolgreiche
Eingaben, die auf „schreibgeschützt“ gesetzt sind, unterliegen den folgenden Einschränkungen:
· Kann den Fokus erhalten, kann aber nicht geändert werden. · Kann die Tabulatortaste zum Navigieren verwenden. · Kann erfolgreich sein.
Nur erfolgreiche Formularelemente sind gültige Daten, d. h. sie können eingereicht werden. Das Wertattribut von deaktivierten und schreibgeschützten Texteingabefeldern kann nur über Skripte geändert werden.