以下是这种情况:我有一个标签的文本集,紧接着是一个如下的response.redirect()调用(这只是一个例子,但我相信它准确地描述了我的情况):
ASPX:
<asp:Label runat="server" Text="default text" />
代码隐藏(在onclick事件上调用的代码):
Label.Text = "foo";
Response.Redirect("Default.aspx");
当页面呈现时,标签显示“默认文本”。我需要做些什么不同的事情?我的理解是这些改变将在幕后自动完成,但显然不是在这种情况下。感谢。
对于一些额外的背景,代码隐藏片段在一个onclick事件调用的方法内调用。还有更多内容,但我只包括了这个问题所关注的内容。
答案 0 :(得分:3)
Response.Redirect
来电将要求用户的浏览器加载您提供的网址中指定的网页。因为这是对页面的新请求,所以页面使用标记中包含的文本(因为我假设标签文本是在按钮处理程序或类似内容中设置的)。
如果您删除了Response.Redirect
来电,那么您的网页应该按照宣传的方式运作。
答案 1 :(得分:1)
ASP和ASP.Net本质上是无状态的,除非明确指定了状态。通常在PostBacks之间的信息(如标签的值)包含在视图状态中,但是如果您更改了viewstate丢失的页面,因为它存储在页面的隐藏字段中。
如果要在调用之间保持标签的值,则需要使用其中一种状态机制(例如会话,首选项)或通信系统(请求(GET,POST))。
此外,您可能正在寻找将改变幕后处理页面的人的Server.Transfer。 Response.Redirect旨在在大多数情况下抛弃您当前的上下文。
答案 2 :(得分:1)
重定向后,您将丢失与控件关联的所有状态信息。如果您只是想刷新页面,请删除重定向。代码完成执行后,页面将刷新并保留任何状态。
在幕后,这是有效的,因为ASP.NET将状态信息写入页面上的隐藏输入字段。单击按钮时,表单将被发布,ASP.NET将解密视图状态。您的代码运行,修改状态,然后状态再次写入隐藏字段并继续循环,直到您更改没有POST的页面。单击指向另一个页面的超链接或通过Response.Redirect()指示浏览器遵循指定的URL时,可能会发生这种情况。
答案 3 :(得分:1)
要保持状态,请使用Server.Transfer而不是Response.Redirect。
答案 4 :(得分:0)
所以,如果我可以回答我自己的问题(根据常见问题解答,这是鼓励的),简短的回答是,你不会通过重定向保持视图状态。查看状态适用于回发,而不是重定向。
奖金:Everything you ever wanted to know about View State in ASP.NET,带图片!
答案 5 :(得分:0)
对于它的价值(并且希望它有价值),Pro ASP.NET 3.5 in C# 2008, Second Edition的第6章是关于这个主题的一个极好的资源。到目前为止,整本书都很棒。