Asp.net UpdatePanel的ViewState无效
(我在Visual Studio 2008(ASP:NET3.5)上运行开发web服务器) 我有一个asp.net页面,其中: UpdatePanel中有一个SlideXtender控件 服务器端我正在捕获滑块的更改事件 用户可以更改滑块值,一切正常 问题 用户可以使用箭头更改滑块的值,但当他将箭头向下放置一段时间后,将引发“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
无效视图状态”
”异常
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调用。