1

(我正在使用开发 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 毫秒已经过去,那么继续回发)。

我正在研究最后一种方法,如果我设法解决这个问题,我会告诉你的。

4

1 回答 1

-1

我不再有这个问题,但我也没有解决这个问题。我正在捕获 Invalid ViewState 异常,因此用户不会注意到任何问题并且一切正常。

我在 global.asax 上做:

protected void Application_Error(object sender, EventArgs e)
{
    Exception exc = HttpContext.Current.Server.GetLastError().InnerException;
    if (exc != null)
    {
        //register the exception on error log table
    }
}

如果有人对这个问题发表了真正的答案,我会立即取消标记。

于 2012-09-14T13:40:07.340 回答