0

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

aspx:

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

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

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

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

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

4

6 回答 6

3

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

如果您删除Response.Redirect呼叫,您的页面应该像宣传的那样工作。

于 2008-09-19T17:17:24.627 回答
1

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

如果您想在调用之间维护标签的值,您需要使用其中一种状态机制(例如 Session、Preferences)或通信系统(Request (GET, POST))。

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

于 2008-09-19T17:16:24.863 回答
1

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

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

于 2008-09-19T17:19:10.207 回答
1

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

于 2008-09-19T17:46:27.753 回答
0

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

奖励:您想知道的关于 ASP.NET中的视图状态的所有信息,包括图片!

于 2008-09-19T17:23:38.310 回答
0

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

于 2008-09-26T23:04:02.273 回答