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

ASPX:

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

代码隐藏(在onclick事件上调用的代码):

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

当页面呈现时,标签显示“默认文本”。我需要做些什么不同的事情?我的理解是这些改变将在幕后自动完成,但显然不是在这种情况下。感谢。

对于一些额外的背景,代码隐藏片段在一个onclick事件调用的方法内调用。还有更多内容,但我只包括了这个问题所关注的内容。

有帮助吗?

解决方案

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

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

其他提示

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

如果您删除 Response.Redirect ,则您的网页应该按宣传的方式运作。

ASP和ASP.Net本质上是无状态的,除非明确指定了状态。通常在PostBacks之间的信息(如标签的值)包含在视图状态中,但是如果您更改了viewstate丢失的页面,因为它存储在页面的隐藏字段中。

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

此外,您可能正在寻找将改变幕后处理页面的人的Server.Transfer。 Response.Redirect旨在在大多数情况下抛弃您当前的上下文。

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

所以,如果我可以回答我自己的问题(根据常见问题解答,这是鼓励的),简短的回答是,你不会通过重定向保持视图状态。查看状态适用于回发,而不是重定向。

奖励:您想知道的有关ASP中View State的所有内容.NET ,带图片!

对于它的价值(并且希望它是值得的), Pro ASP的第6章C#2008中的.NET 3.5,第二版是关于该主题的极好资源。到目前为止,整本书都很棒。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top