如何通过response.redirect保留标签的值?

时间:2020-03-06 14:26:59  来源:igfitidea点击:

情况如下:我有一个标签的文本集,紧接着是一个response.redirect()调用,如下所示(这只是一个示例,但我相信它可以准确地描述我的情况):

aspx:

<asp:Label runat="server" Text="default text" />

后台代码(在onclick事件上调用的代码):

Label.Text = "foo";
Response.Redirect("Default.aspx");

页面呈现时,标签上会显示"默认文本"。我需要做些什么?我的理解是,此类更改将在幕后自动完成,但显然不是在这种情况下。谢谢。

为了获得一些额外的背景知识,在onclick事件调用的方法内部调用了代码隐藏代码段。还有更多内容,但我只列出了此问题感兴趣的内容。

解决方案

除非明确指定状态,否则ASP和ASP.Net本质上是无状态的。通常,在两次BackBacks之间,标签的值之类的信息包含在viewstate中,但是如果更改页面,则viewstate会丢失,因为它被存储在页面的隐藏字段中。

如果要在两次调用之间保持标签的值,则需要使用一种状态机制(例如,会话,首选项)或者通信系统(请求(GET,POST))。

另外,我们可能正在寻找Server.Transfer,它将改变谁在后台处理页面。在大多数情况下,Response.Redirect旨在摆脱我们当前的上下文。

" Response.Redirect"调用将要求用户的浏览器加载我们提供给它的URL中指定的页面。因为这是对页面的新请求,所以页面利用了标记中包含的文本(因为我假设标签文本是在按钮处理程序或者类似控件内设置的)。

如果删除Response.Redirect调用,则页面应如广告所示那样工作。

重定向后,我们将丢失与控件关联的所有状态信息。如果我们只是想刷新页面,请删除重定向。代码执行完后,页面将刷新并保留所有状态。

在幕后,这是可行的,因为ASP.NET将状态信息写入页面上的隐藏输入字段。当我们单击一个按钮时,将发布该窗体,并且ASP.NET解密该视图状态。代码将运行,修改状态,然后将状态再次写入隐藏字段,然后循环继续进行,直到更改页面而无需POST。单击超链接到另一个页面或者通过Response.Redirect()指示浏览器遵循指定的URL时,可能会发生这种情况。

因此,如果我可以回答自己的问题(根据FAQ,我们鼓励这样做),那么简短的答案是,我们不会通过重定向保持视图状态。查看状态用于回发,而不用于重定向。

奖励:我们想知道的有关ASP.NET中视图状态的所有信息,并附带图片!

要保持状态,请使用Server.Transfer而不是Response.Redirect。

对于它的价值(并希望它是有价值的),C2008,第二版中的Pro ASP.NET 3.5第6章是该主题的绝妙资源。到目前为止,整本书都很棒。