外国人のブログでこの説明を偶然目にしました。テキストボックス コントロールが readonly に設定され、ページのenableviewsate が false に設定されている場合、これは asp.net 2.0 でのみ発生します。この状況は asp.net 1.0/1.1 では発生しません。コードは次のとおりです。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" EnableViewState="false" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="サーバー">
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.Textbox1.Text = "readonly text"
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.lblMessage.Text = this .Textbox1.Text;
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="サーバー">
<title>無題のページ</title>
</head>
<本文>
<form runat="server" id="Form1">
<asp:textbox ID="Textbox1" runat="server" ReadOnly="true" ForeColor="silver"></asp:textbox>
<asp:textbox ID= "Textbox2" runat="server" ReadOnly="true">テキスト</asp:textbox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
<asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
.net 2.0 で実行すると、テキスト ボックスの値は実際に失われます。最後に、MSDN 分析と Microsoft のバグ フィードバック センターを見つけました。実際、これはバグではなく、.net 2.0 におけるセキュリティのための小さな変更です。その具体的な抜粋は次のとおりです。
Microsoft からのフィードバックは次のとおりです。
注意深く分析した結果、観察された動作は次のように説明されます。
ユーザーのセキュリティ上の懸念に基づいた ASP .NET の設計変更により、読み取り専用テキストボックスの入力はビューステートに保存されますが、ビューステートが無効になっている場合は保存されません。これを回避するために、ページ開発者は読み取り専用属性をテキストボックスに追加できます。
アクセス
するために使用できます。
Webサーバーとツール
MSDN 2005 分析:
ReadOnly プロパティが true に設定された TextBox コントロールの Text 値は、ポストバックが発生するとサーバーに送信されますが、サーバーは読み取り専用のテキスト ボックスに対して処理を行いません。これにより、悪意のあるユーザーが Text 値を変更することができなくなります。 Text プロパティの値は、サーバー側のコードによって変更されない限り、ポストバック間でビュー ステートに保持されます。
出典: ジャッキーロンブログ