2

我已经从这篇文章中实现了一个自定义视图状态提供程序

http://www.codeproject.com/Articles/8001/ViewState-Provider-an-implementation-using-Provide

这在完全回发的情况下工作正常,但在部分回发(Ajax)的情况下它不起作用,有人可以为此提供解决方案,或者指导我这件事出了什么问题我不知道。

4

1 回答 1

1

终于我解决了这个烂摊子,感谢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...

}

希望这可以帮助其他人也在同样的问题上苦苦挣扎。

于 2013-02-07T07:02:08.650 回答