(我正在使用开发 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 的文本属性会更改此事件以引发txtSlider_TextChanged
事件。我想我可以使用 HiddenField 来存储我上次回发的时间,并在客户端使用它来定义 txtSlider 是否回发(如果至少 500 毫秒已经过去,那么继续回发)。
我正在研究最后一种方法,如果我设法解决这个问题,我会告诉你的。