我想在后面的代码中获取原始ViewState
数据。
像这样:
private string GetRawViewState()
{
// What code should be here.
}
// sample result : +9O4aKH/cgkvaOlTP4rWZotoC6yCtEXUhV2khD3IdEcQXc3wwdhiK2oOgWBVYsFmmZc60tR+Vu+XJRi9/9mpzrHbwDuvnq684rT+W8XywFHw2r3KdgVDVPqwHVL3TChORfmaBkcKAYlXf0Fl54PZ/FWfWB96s9fIf4/2iu57Wb0=
答案 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()后发生。这可能是最简单的方法。