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 に答える