EDIT 2:まあ、私はコードに行きました。彼らがここで何をしているか注意してください。彼らはviewstateを読み込んで、次に回り込んでTextプロパティをviewstateにあったものに設定すると言っています。ビューステートの追跡がオンになっていても、LoadViewStateが呼び出された後、私は見ている動作になります。コードの意味は次のとおりです:Label ASP.ViewState実装のバグ?
if(s!= Text){Text = s;}それは問題を完全に取り除き、必要な不変のものをそのまま維持します。
/// <internalonly/>
/// <devdoc>
/// <para>Load previously saved state.
/// Overridden to synchronize Text property with LiteralContent.</para>
/// </devdoc>
protected override void LoadViewState(object savedState) {
if (savedState != null) {
base.LoadViewState(savedState);
string s = (string)ViewState["Text"];
if (s != null)
Text = s;
}
}
編集:これはすべてのテストから、これはラベルコントロールにのみ影響するようです。私はまだこれがバグだと思う。
これはASP.NET 3.5 Webサイトです。 (HTML、頭部、胴体、等切り取ら)
<form id="form1" runat="server">
<asp:Label runat="server" ID="label1">
This is a lot of text.
This is a lot of text.
This is a lot of text.
This is a lot of text.
This is a lot of text.
This is a lot of text.
This is a lot of text.
</asp:Label>
<asp:Button runat="server" ID="button1" Text="Click" OnClick="button1_Click" />
<script>
document.write(document.getElementById("__VIEWSTATE").value.length);
</script>
</form>
ページが後ろに、次のコードた:
protected void button1_Click(object sender, EventArgs e) {
//label1.AccessKey = "a";
}
はい、その行がある
は、次の.aspxページを検討しますコメントアウトされました。それに来る。したがって、ボタンをクリックすると、そのviewstateが52バイトであることがわかります。ラベルにはたくさんのテキストがありますが、もちろんviewstateの仕組みは、Textプロパティの初期値が決して変更されなかったので、viewstateにたくさんのテキストを保存する必要はありません。 OK。ここまでは順調ですね。これはすべて予想される動作です。実際、ラベルに1メガのテキストが含まれていても、ビューステートのサイズは52バイトになります。 OK。今度はメソッドを
protected void button1_Click(object sender, EventArgs e) {
label1.AccessKey = "a";
}
に変更してください。変更するプロパティは関係ありません。今すぐボタンをクリックします。 ViewStateのサイズは最大92バイトになります。一文字のアクセスキーを格納するために40バイト、ちょっとあなたが私に尋ねるなら、少しでも:)今度はもう一度ボタンをクリックしてください。 viewstateのサイズは今何ですか? 92バイトは正しくなければなりませんか?いいえ、それはです。もう一度クリックすると、480バイトのサイズにとどまります。何が起こっていますか?ラベルプロパティを変更すると、ラベルがTEXTというラベルをビューステートに格納し始めました。何????ラベルに100Kのテキストを貼り付けると、viewstateが〜100Kまで上がることがわかります。
これはバグですか?これはどのようにの予想どおりの動作ですか?
それがうまくいく方法であれば、それは不思議ではありません。 –
私にバグのように聞こえる。 – Greg
バグかどうかわかりませんが、ViewStateに存在していた場合にのみTextを設定していることに注意してください。 Textプロパティsetterの実装をチェックし、それがしようとしている可能性のある副作用がないかどうかを確認します。 –