can't turn off ViewState (asp.net/VS2010), what can be wrong?

有些话、适合烂在心里 提交于 2019-12-08 07:18:57

问题


I'm working on an application which generates a list of customers from a db. I have disabled ViewState in default.aspx, but now when I viewed the source code of the generated HTML page I saw that the ViewState is on.

I've tried to add both ViewStateMode="Disabled" and EnableViewState="False" (separately and even together) without any luck.

What can be wrong?

ViewState code from the source code if it helps:

<div class="aspNetHidden"> 
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="88luWaDvrTt0+OWLhB and a lots of characters after this...

EDIT: Now when I looked again in the source code I can see the following which I find strange:

  • There's A LOT of ViewState characters (takes 15-20 seconds to scroll through it)
  • There's two places with ViewState code, separate from each other

回答1:


ASP.Net pages have both Control State and View State. Control State is for absolutely critical data that the control can't function without (at least in theory).

View State and Control State are both stored in the same field. A site with View State completely disabled may still have Control State.

Unfortunately, ASP.Net is quite inconsistent as to how it differentiates between the two. For example, a DropDownList will no longer fire change events with View State disabled. I consider that a critical function of a drop down and I would be happy to spend the few bytes of space to store the currently selected value in Control State so that a change could be detected.

If you are wondering about the contents of the hidden field containing state, you can decode it. It can be very useful for detecting View State "leaks".




回答2:


Looking at the MSDN documentation, even when you disable it, it is still used to detect postbacks:

Even if EnableViewState is false, the page might contain a hidden view state field that is used by ASP.NET to detect a postback.




回答3:


You can deserialize the viewstate to see who's putting data in there:

LosFormatter lf = new LosFormatter();
object deserialized = lf.Deserialize("!!! YOUR VIEWSTATE HERE !!!");

Attach a debugger and have a look at the contents of deserialized



来源:https://stackoverflow.com/questions/9422240/cant-turn-off-viewstate-asp-net-vs2010-what-can-be-wrong

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!