来自PHP背景我喜欢使用干净的URL将数据从一个服务抓取到另一个服务。
但是,在我的一些ASP.NET项目中,我在URL中获得了可怕的ViewState参数。
有没有办法在全球范围内关闭此功能?
这会对我的ASP.NET应用程序产生什么影响?
答案 0 :(得分:34)
您可以像这样关闭整个网站的viewstate:
<system.web>
<pages enableViewState="false" />
那就是说,你不应该把它放在网址上。 ViewState是一个隐藏字段,通过回发(通常使用post)发送到服务器。它在页面呈现给客户端时保持控件的状态,并在每次回发时发送它。如果它适用于应用程序,你可以切换到使用post(问题表单肯定是使用get),如果没有看看Jon的答案。
查看此链接,了解有关viewstate如何适应asp.net生命周期的更多信息:http://msdn.microsoft.com/en-us/library/ms972976.aspx。
答案 1 :(得分:10)
在撰写similar question时我有一个Reputation Tracker。
我不知道你是如何在全球范围内做的,只是从不使用runat="server"
设置的表单,这更多地与纪律而不是设置有关。特别是,如果您在表单上设置runat="server"
,我相信您将始终获得一个viewstate参数,即使您已将其关闭,因此您没有获得任何值 。无论如何,这是我的经历。
显然这对你有所限制,但我发现在ASP.NET的适当部分使用HTML服务器控件(而不是ASP.NET控件)可以让生活变得简单易懂。
答案 2 :(得分:8)
默认情况下,使用web.config中的<page>
元素关闭ViewState。一旦在web.config中禁用ViewState,在EnableViewState="true"
指令中使用@Page
将不再有效。如果您稍后决定需要特定页面的ViewState,则可以使用<location>
元素将其重新打开。
<configuration>
<system.web>
<pages enableViewState="false" />
</system.web>
<location path="MyFolder/MyPage.aspx">
<system.web>
<pages enableViewState="true" />
</system.web>
</location>
<location path="Site.master">
<system.web>
<pages enableViewState="true" />
</system.web>
</location>
</configuration>
您需要对启用ViewState的页面使用的任何母版页执行相同的操作。
答案 3 :(得分:4)
将其添加到web.config文件中:
<Pages enableViewState="false"/>
答案 4 :(得分:3)
您可以切换到ASP.Net MVC。据我所知,它不使用ViewState。
答案 5 :(得分:2)
但请记住,如果没有ViewState,大多数ASP.NET Web表单开发人员所期望的某些行为将无法运行。 ViewState的目的是提供各种页面和控件属性从一个请求持续到下一个请求的错觉。 ViewState不包含所有控件属性,只包含已更改的控件属性。我们的想法是ViewState保留了上次呈现表单时的属性。
一个很好的例子是下拉列表中的SelectedIndexChanged
事件(没有设置autopostback的事件)。这是因为ViewState保留了先前的索引,并且表单发布了当前索引,并且控件将两者进行比较以便知道所选索引已更改。那是它引发SelectedIndexChanged
事件的时候。没有ViewState,该事件将不会触发。 TextChanged
事件等同样
如果没有GET情况(我从未遇到过),ViewState的一个大问题是在不需要的地方使用它。您的网格控件不需要在其所有行中保留所有控件的先前值,因此不要在其上启用ViewState。