ユーザーコントロールを動的にロードするASP.Netページがあり、それらの間でデータテーブルを共有したい
私は次のようにセッション状態を使用しました
HttpContext.Current.Session["DataTable"] = DT;
ユーザーコントロールで次のようにアクセスしました
gridVw.DataSource =(DataTable) HttpContext.Current.Session["DataTable"] ;
gridVw.DataBind();
データは正常にロードされますが、問題は、サーバー側またはポストバックでイベントにアクセスしているときに、無効なビューステートのエラーが発生することです(IEのみ)
また、ページからセッションにアクセスすると、ポストバック中に同じ問題が発生します
これがエラーページです
このページの状態情報は無効であり、破損している可能性があります。FormatException:入力は、Base 64以外の文字、2つを超えるパディング文字、またはパディング文字の中に不正な文字が含まれているため、有効なBase-64文字列ではありません。]
System.Convert.FromBase64_ComputeResultLength(Char * inputPtr、Int32 inputLength)+10545429 System.Convert.FromBase64CharPtr(Char * inputPtr、Int32 inputLength)+71
System.Convert.FromBase64String(String s) +41System.Web.UI.ObjectStateFormatter
。 Deserialize(String inputString、目的目的)+66
System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter2.Deserialize(String serializedState、目的目的)+8
System.Web.UI.Util.DeserializeWithAssert(IStateFormatter2フォーマッター、文字列serializedState、目的)+40
System.Web.UI.HiddenFieldPageStatePersister.Load()+127[ViewStateException:無効なビューステート。
セッションに長いデータがあるか、デリメータがゼロであるか、または原因となる理由が何であれ、それが原因だと思います
System.Convert.FromBase64
別のセッション変数(ダミー番号)を使用し、ユーザーコントロールからアクセスして、このユーザーコントロールに問題がなく、問題がないことを確認しました。
問題は、Sessionを使用してデータテーブルを保存したくないということです。その欠点はわかっていますが、他に何か提案はありますか?
注:静的メソッド(WebMethod
)でWebページにユーザーコントロールを読み込んでいるため、考えられる回避策を実行できません。