繁体   English   中英

Viewstate如何在内部工作

[英]How does Viewstate work internally

抓这个!

我已经用谷歌搜索了这个。 1.假设我有一个Web表单,其中包含一些文本框,其中包含ID的textbox1,textbox2,textbox3。 它们都启用了viewstate。 我在这些文本框中输入了一些值,然后按下一个空的回发按钮,回发后所有值仍然存在。 回发后如何在viewstate中访问它们? 我认为它们是以文本框的ID名称保存的,但是我不希望它像这样工作。 字符串s = ViewState [“ textbox1”]。ToString(); 我正在尝试使其工作,因为我希望能够将viewstate保存到会话中,以便在访问另一个Web表单后可以检索信息。 2.我只能在制作它的同一页面上使用viewstate吗? 我无法在editor.aspx的default.aspx上使用viewstate吗? 3.还有一件事,viewstate保存树视图节点的展开方式是否正确? 我想将状态保存在使用同一母版页的两个Web窗体之间的Treeview上。


编辑:

好吧,这还不够清楚,那就是已知的。 基本上,我试图理解视图状态以及它可以做什么。 我通常不使用viewstate来存储值。

我正在尝试做的事情,或者弄清楚是否可以使用viewstate。

我有一个母版页,并且在母版页上是一个树状视图。 我有两个与母版页一起使用的页面,Default.aspx和editor.aspx。 我在Default.aspx中进行导航和所有操作。 当我在树形视图中展开节点并选择其中一个树形节点时,该树形节点上的navigationurl将我发送至editor.aspx?navID = 3。 editor.aspx使用相同的母版页,并且我希望该页在单击节点之前,就像Default.aspx在树形视图上显示相同的状态。

看一下本文,以了解有关viewstate的更多信息。 我发现它很有帮助

真正了解观点

您的代码不起作用的原因是因为ASP.NET使用了不同的名称(我认为它以格式名称和母版页名称(如果存在)为控件名称的前缀)。 但是,即使您可以使用该方法将其拉出,也不应这样做。 您应该手动将属性自己添加到viewstate。 因此,如果您尝试将文本保留在文本框中,请使用以下代码:

ViewState["TextBoxText"] = textbox1.ToString();

并在以后检索,请使用:

String s = (String)ViewState["TextBoxText"];

要回答您的问题:

  1. 你是对的。 视图状态对每个页面都是神圣的,无法访问
  2. Treeview将自动保存展开的节点。 只要确保您对if(!Page.IsPostBack)块内的treeview进行初始化即可。

System.Web.UI.Control中的Viewstate集合仅允许您访问该控件的viewstate包,而不能访问子控件。 因此,基本上您无法通过ViewState做您想做的事情。

您可以通过Request.Form参数获取控件发布的值。 例如,如果您有一个控件调用textbox1,则可以通过以下方式获取其过帐值

Request.Form["textbox1"]  

根据控件的不同,您可能需要对从中获得的值进行一些处理。 对于树视图,您可以使用以下命令获取其展开状态的发布值:

Request.Form[TreeView1.ClientID + "_ExpandState"]  

该值是每个节点带有e(扩展)或n(未扩展)的字符串。 因此,如果值为“ eennene”,则将扩展节点1 2 5和7而不会扩展其他节点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM