Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net UpdatePanel的ViewState无效_Asp.net_Visual Studio 2008_Webforms_Viewstate - Fatal编程技术网

Asp.net UpdatePanel的ViewState无效

Asp.net UpdatePanel的ViewState无效,asp.net,visual-studio-2008,webforms,viewstate,Asp.net,Visual Studio 2008,Webforms,Viewstate,(我在Visual Studio 2008(ASP:NET3.5)上运行开发web服务器) 我有一个asp.net页面,其中: UpdatePanel中有一个SlideXtender控件 服务器端我正在捕获滑块的更改事件 用户可以更改滑块值,一切正常 问题 用户可以使用箭头更改滑块的值,但当他将箭头向下放置一段时间后,将引发“无效视图状态””异常 Invalid viewstate. Client IP: 127.0.0.1 Port: User-Agent: Mozilla/4.0 (co

(我在Visual Studio 2008(ASP:NET3.5)上运行开发web服务器)

我有一个asp.net页面,其中:

UpdatePanel中有一个SlideXtender控件

服务器端我正在捕获滑块的更改事件

用户可以更改滑块值,一切正常

问题

用户可以使用箭头更改滑块的值,但当他将箭头向下放置一段时间后,将引发“
无效视图状态”
”异常

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 an 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....
}

受保护的void txtlider_TextChanged(对象发送方,事件参数e)
{            
//服务器处理,UpdatePanel的更新。。。。
}
当用户移动滑块更改其值时,txtsslider的text属性会更改此值,从而引发
txtsslider\u TextChanged
事件。我想我可以使用一个HiddenField来存储我最后一次回发的时间,并在客户端使用它来定义txtsslider是否回发(如果至少过了500ms,那么继续回发)


我正在研究最后一种方法,如果我能解决这个问题,我会让你知道。

我不再有那个问题,但我也解决不了这个问题。我正在捕获无效的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
    }
}

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

我会在客户端引入某种限制-例如,只在mouseup上更新/调用服务器-因此滑块会更改值,但在用户松开按钮/鼠标之前,它不会实际调用服务器。或者只是缓存客户端滑块的值?这可能吗?@leon我只在mouseup上调用server方法,问题是当用户使用键盘的箭头时,因为每个单元都会引发更改的事件。我需要调用服务器方法,所以您的第二个建议不是一个选项。谢谢你!那使用什么呢?所以,只有在用户拔下箭头键后才能呼叫服务器?您也有服务器端代码吗?@leon当用户使用向下滑动键时,Xtender开始一次更改一个单位的值,并更改txtsslider的文本属性以提高服务器方法。我想我无法控制keydown和keyup事件来改变顺序。您需要处理服务器端事件还是可以在客户端使用逻辑。如果确实需要来自服务器的值,可以使用自定义AJAX调用。