以前の ASP.NET 1.x バージョンでは、ReadOnly に設定された TextBox コントロールは、クライアント側で値が変更された後も、変更された値をサーバー側で取得できました。ただし、ASP.NET 2.0 では、この方法は制限されています。 。これにより、アプリケーションのセキュリティが向上すると考えられます。以下は、データを取得する TextBox コントロールの内部メソッドであり、ReadOnly の制限がわかります。
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
Base.ValidateEvent(postDataKey);
文字列 text1 = this.Text;
文字列 text2 = postCollection[postDataKey];
if (!this.ReadOnly && !text1.Equals(text2, StringComparison.Ordinal))
{
this.Text = text2;
true を返します。
}
false を返します。
あり
、送信されたデータの名前/値の NameValueCollection には制限がないため、値は Request["Form Name"] メソッドを通じて取得できます。次の例は、この点を完全に示しており、ReadOnly を使用し、Text プロパティを通じて値を取得する方法を示しています。
<%@ Page Language="C#" EnableViewState="false" %>
<!DOCTYPE html PUBLIC "-/ /W3C/ /DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="server">
protected void Button1_Click(object sender , EventArgs e )
{
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(オブジェクト送信者, EventArgs e)
{
TextBox3.Attributes.Add("読み取り専用", "読み取り専用");
}
</script>
<script type="text/javascript">
//<![CDATA[
関数 SetNewValue()
{
document.getElementById('<%=TextBox1.ClientID %>').value = "TextBox1 新しい値";
document.getElementById('<%=TextBox2.ClientID %>').value = "TextBox2 新しい値";
document.getElementById('<%=TextBox3.ClientID %>').value = "TextBox3 新しい値";
}
//]]>
</script>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head runat="サーバー">
<title>ASP.NET 2.0 の TextBox コントロールと ReadOnly および Enabled プロパティ</title>
</頭>
<本文>
<form id="form1" runat="server">
<スパン>TextBox1 読み取り専用:</スパン>
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" Text="TextBox1 古い値"></asp:TextBox><br />
<span>TextBox2有効:</span>
<asp:TextBox ID="TextBox2" runat="server" Enabled="False" Text="TextBox2 古い値"></asp:TextBox><br />
<スパン>TextBox3 ReadOnly:</スパン>
<asp:TextBox ID="TextBox3" runat="server" Text="TextBox3 古い値"></asp:TextBox><br />
<br />
<asp:Button ID="Button2" runat="server" Text="新しい値を変更" OnClientClick="SetNewValue();return false;" />
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
</フォーム>
</本文>
</html>
無効な TextBox の場合、サーバー側で変更された値を取得できません。どうしてもこの属性を使用したい場合は、フォーム フィールドを非表示にする方法を使用してください。
ReadOnly 属性を持つ TextBox は、クライアント側で次のようなマークとして表示されます。
<input readonly = "readonly">
Enabled 属性を持つ TextBox は、クライアント側で次のようなマークとして表示されます。 <input disabled="disabled" ">
W3C 仕様によると: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12
無効に設定された入力には次の制限があります:
· フォーカスを受信できません · スキップされますTab キーを使用する場合 · 成功しない可能性がある
読み取り専用に設定された入力には次の制限があります:
· フォーカスを受け取ることはできますが、変更することはできません · Tab キーを使用して移動できます · 成功する可能性があります
成功したフォーム要素のみが有効なデータです。提出することができます。無効および読み取り専用のテキスト入力ボックスの value 属性は、スクリプトを通じてのみ変更できます。