(開発用Webサーバーを使用してVisual Studio 2008(ASP:NET 3.5)で実行しています)
私はasp.netページを持っています:
UpdatePanel内にSliderExtenderコントロールがあります。
サーバー側スライダーのChangedイベントをキャッチしています。
ユーザーはスライダーの値を変更でき、すべてが正常に機能します。
問題
ユーザーは矢印を使用してスライダーの値を変更できますが、矢印をしばらく下に置いたままにすると、「Invalid ViewState
」例外が発生します。
Invalid viewstate.
Client IP: 127.0.0.1
Port:
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MS-RTC LM 8; .NET4.0C; .NET4.0E)
ViewState: /wEPDwXJja...
ChromeをIE8で試してみましたが、同じ結果になりました。
Changed
サーバー側のメソッドが何度も呼び出され、サーバーの処理速度が着信呼び出しによって打ち負かされるときが来るため、これが発生することを理解しています。
質問
この問題の発生を回避するにはどうすればよいですか?
私は何を試しましたか?
- この質問で最も人気のある提案。
- ページレンダリングをオーバーライドして、ViewStateを一番上に配置します。
- ViewStateUserKeyを確立します。
- ウィンドウが読み込まれるまでフォームを無効にします。
- マシンキーの設定。
編集
これはコードです:
<asp:TextBox runat="server" ID="txtSlider" AutoPostBack="true" Text="100" OnTextChanged="txtSlider_TextChanged"></asp:TextBox>
<asp:SliderExtender ID="sldSlider" Decimals="0" TargetControlID="txtSlider" Length="50"
BoundControlID="lblProporcion" runat="server" Minimum="0" Maximum="100" >
</asp:SliderExtender>
protected void txtSlider_TextChanged(object sender, EventArgs e)
{
//Server processing, UpdatePanel's update....
}
ユーザーがスライダーを動かして値を変更すると、txtSliderのtextプロパティが変更され、txtSlider_TextChanged
イベントが発生します。HiddenFieldを使用して、最後にポストバックした時間を保存し、それをクライアント側で使用して、txtSliderがポストバックするかどうかを定義できると思います(少なくとも500ミリ秒が経過した場合は、先に進んでポストバックします)。
私はその最後のアプローチに取り組んでいます、私がこの問題を解決することができたらあなたに知らせます。