How do I persist the value of a label through a re

2019-06-12 07:04发布

Here's the situation: I have a label's text set, immediately followed by a response.redirect() call as follows (this is just an example, but I believe it describes my situation accurately):

aspx:

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

Code-behind (code called on an onclick event):

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

When the page renders, the label says "default text". What do I need to do differently? My understanding was that such changes would be done automatically behind the scenes, but apparently, not in this case. Thanks.

For a little extra background, the code-behind snippet is called inside a method that's invoked upon an onclick event. There is more to it, but I only included that which is of interest to this issue.

6条回答
够拽才男人
2楼-- · 2019-06-12 07:27

For what it's worth (and hopefully it's worth something), Chapter 6 of Pro ASP.NET 3.5 in C# 2008, Second Edition is a terrific resource on the subject. The whole book has been great so far.

查看更多
Explosion°爆炸
3楼-- · 2019-06-12 07:31

ASP and ASP.Net are inherently stateless unless state is explicitly specified. Normally between PostBacks information like the value of a label is contained in the viewstate, but if you change pages that viewstate is lost because it is was being stored in a hidden field on the page.

If you want to maintain the value of the label between calls you need to use one of the state mechanisms (e.g. Session, Preferences) or communication systems (Request (GET, POST)).

Additionally you may be looking for Server.Transfer which will change who is processing the page behind the scenes. Response.Redirect is designed to ditch your current context in most cases.

查看更多
霸刀☆藐视天下
4楼-- · 2019-06-12 07:34

So, if I may answer my own question (according to the FAQ, that's encouraged), the short answer is, you don't persist view state through redirects. View state is for postbacks, not redirects.

Bonus: Everything you ever wanted to know about View State in ASP.NET, with pictures!

查看更多
\"骚年 ilove
5楼-- · 2019-06-12 07:40

A Response.Redirect call will ask the user's browser to load the page specified in the URL you give it. Because this is a new request for your page the page utilises the text which is contained in your markup (as I assume that the label text is being set inside a button handler or similar).

If you remove the Response.Redirect call your page should work as advertised.

查看更多
一夜七次
6楼-- · 2019-06-12 07:44

To persist state, use Server.Transfer instead of Response.Redirect.

查看更多
放荡不羁爱自由
7楼-- · 2019-06-12 07:48

After a redirect you will loose any state information associated to your controls. If you simply want the page to refresh, remove the redirect. After the code has finished executing, the page will refresh and any state will be kept.

Behind the scenes, this works because ASP.NET writes the state information to a hidden input field on the page. When you click a button, the form is posted and ASP.NET deciphers the viewstate. Your code runs, modifying the state, and after that the state is again written to the hidden field and the cycle continues, until you change the page without a POST. This can happen when clicking an hyperlink to another page, or via Response.Redirect(), which instructs the browser to follow the specified url.

查看更多
登录 后发表回答