我已经从这篇文章中实现了一个自定义视图状态提供程序
http://www.codeproject.com/Articles/8001/ViewState-Provider-an-implementation-using-Provide
这在完全回发的情况下工作正常,但在部分回发(Ajax)的情况下它不起作用,有人可以为此提供解决方案,或者指导我这件事出了什么问题我不知道。
我已经从这篇文章中实现了一个自定义视图状态提供程序
http://www.codeproject.com/Articles/8001/ViewState-Provider-an-implementation-using-Provide
这在完全回发的情况下工作正常,但在部分回发(Ajax)的情况下它不起作用,有人可以为此提供解决方案,或者指导我这件事出了什么问题我不知道。
终于我解决了这个烂摊子,感谢Aristos给了我关于这个问题的线索。
这是我所做的只是在SqlViewStateProvider.cs中更改此方法
public override void SavePageState(System.Web.UI.Control pControl, object viewState)
{
string vsKey = String.Empty;
// Searching for the hidden field named "__vsKey"
// Comment out this line
//System.Web.UI.HtmlControls.HtmlInputHidden ctrl = System.Web.UI.HtmlControls.HtmlInputHidden)pControl.FindControl("__vsKey");
// Add this line
string lastKey = ((Page)pControl).Request.Form["__vsKey"];
if (lastKey == null)
{
// Generate new GUID
vsKey = Guid.NewGuid().ToString();
// Store in the hidden field
// Remove this line its old school code
//((Page)pControl).RegisterHiddenField("__vsKey", vsKey);
// Add this new one
((Page)pControl).ClientScript.RegisterHiddenField("__vsKey", vsKey);
}
else
{
// Use the GUID stored in the hidden field
// Comment this one out
//vsKey = ctrl.Value;
// Add these two lines
vsKey = lastKey;
((Page)pControl).ClientScript.RegisterHiddenField("__vsKey", lastKey);
}
// Every thing else is just as-is...
}
希望这可以帮助其他人也在同样的问题上苦苦挣扎。