抓住这个!
我已经google了我的屁股寻找这个。 1.假设我有一个带有几个文本框的webform,ID为textbox1,textbox2,textbox3。他们都启用了viewstate。 我在这些文本框中放了一些值并按下一个空的回发按钮,所有值在回发后仍然存在。如何在回发后在视图状态中访问它们? 我认为它们是以文本框的ID名称保存的,但是我不能让它像这样工作。 String s = ViewState [“textbox1”]。ToString(); 我试图让这个工作,因为我希望能够将viewstate保存到会话中,这样我可以在访问另一个webform后检索信息。 2.我只能在同一页面上使用视图状态,这是不对的? 我无法在editor.aspx中的default.aspx上使用viewstate? 还有一件事,不是说viewstate保存了树视图节点的消耗方式吗?我想在使用相同母版页的两个webform之间的树视图中保存状态。
修改
好的,这还不够清楚,那就是给定的。 基本上我正在尝试理解视图状态以及我可以用它做什么。 我通常不使用viewstate来存储值。
我正在尝试做什么,或者弄清楚它是否可以与viewstate一起使用。
我有一个母版页,在母版页上是树视图。我有两个页面,我使用的主页,Default.aspx和editor.aspx。 我在Default.aspx中进行导航和所有操作。当我在树视图中展开节点并选择其中一个treenode时,该treenode上的导航将我发送到editor.aspx?navID = 3。 editor.aspx使用相同的母版页,我希望该页面在树视图上显示相同的状态,就像我点击节点之前的Default.aspx一样。
答案 0 :(得分:4)
查看本文以了解有关viewstate的更多信息。我发现它很有用
答案 1 :(得分:2)
您的代码不起作用的原因是因为ASP.NET使用了不同的名称(我认为它在控件名称前面加上表单名称和主页面名称,如果有的话)。但即使你能用这种方法拉它,你也不应该。您应该自己手动将属性添加到视图状态。因此,如果您尝试在文本框中保留文本,请使用以下代码:
ViewState["TextBoxText"] = textbox1.ToString();
要稍后检索,请使用:
String s = (String)ViewState["TextBoxText"];
回答你的问题:
答案 2 :(得分:1)
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将被扩展而其他节点将不会