在后面的代码中获取原始ViewState数据

时间:2017-11-25 15:30:31

标签: c# asp.net postback viewstate

我想在后面的代码中获取原始ViewState数据。 像这样:

private string GetRawViewState()
{
 // What code should be here.
}
// sample result : +9O4aKH/cgkvaOlTP4rWZotoC6yCtEXUhV2khD3IdEcQXc3wwdhiK2oOgWBVYsFmmZc60tR+Vu+XJRi9/9mpzrHbwDuvnq684rT+W8XywFHw2r3KdgVDVPqwHVL3TChORfmaBkcKAYlXf0Fl54PZ/FWfWB96s9fIf4/2iu57Wb0=

1 个答案:

答案 0 :(得分:1)

我认为没有简单的方法可以做到这一点。

DateTimeFormatter.ofPattern("ss:nnnnnn")根据internal void Page.RenderViewStateFields(HtmlTextWriter)中的序列化内容呈现__VIEWSTATE字段。序列化由HiddenFieldPageStatePersister.Save()完成,但您只能通过受保护的Page.PageStatePersister访问。

所以,没有简单的api调用可以让你这样做。

自定义页面类(在web.config中使用<tagMapping>)将能够访问具有受保护可见性的内容,这意味着您可以访问PageStatePersister实例,但您无权访问序列化值。您可以创建自己的ObjectStateFormatter并序列化PageStatePersister.ViewState和PageStatePersister.ControlState属性,但我不确定生成的值是否与发送到客户端的值相同。

另一方面,

反射只能读取Page.ClientState属性。您可以在Page.SaveStateComplete事件中使用此功能,该事件在内部调用PageStatePersister.Save()后发生。这可能是最简单的方法。