2011-10-07 21 views
2

我已经停用与ViewState的一个非常简单的网页比比皆是:ViewState不需要保存控制值,所以它是做什么的?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" EnableViewState="false" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<body> 
    <form id="form1" runat="server"> 
    <div> 

    <asp:TextBox runat="server" EnableViewState="false"></asp:TextBox> 

    <asp:DropDownList runat="server" id="mylist" EnableViewState="false"> 
    <asp:ListItem>my item 1</asp:ListItem> 
    <asp:ListItem>my item 2</asp:ListItem> 
    <asp:ListItem>my item 3</asp:ListItem> 
    <asp:ListItem>my item 4</asp:ListItem> 
    <asp:ListItem>my item 5</asp:ListItem> 
    <asp:ListItem>my item 6</asp:ListItem> 
    </asp:DropDownList> 

    <asp:Button runat="server" Text="click me"/> 

    </div> 
    </form> 
</body> 
</html> 

代码背后

public partial class test : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write("Dropdown list value is " + mylist.SelectedValue); 

    } 
} 

正如你所看到的,没有ViewState是允许的,但它确实保留控制值,在这里看到的例如运行http://www.yart.com.au/stackoverflow/viewstate/test.aspx

编辑

latr0dectus已经在下面回答了我的问题。但是实际上需要ViewState的例子是什么?我看不到控制值以外的表单需要什么。

回答

5

@Petras:ViewState不需要保存控制值,那么它是什么 做什么?

控件实现IPostBackDataHandler使用LoadPostData()方法来分配给某些属性。

阅读这篇文章:Understanding ASP.NET View State

它是一种常见误解跨回传视图状态 具有文本框,复选框,DropDownLists, 和其他Web控件莫名其妙负责记住自己的价值开发者。这与 并非如此,因为这些值通过发布的后台表单字段 值进行标识,并在LoadPostData()方法中为实现IPostBackDataHandler的那些控件 分配。

+0

那条很好:D –

1

我不太确定你的问题是什么。

视图状态用于页面生命周期。页面送达后,它将在服务器上销毁。然后浏览器发回它也发回视图状态。服务器可以使用此功能与发布的表单值相结合来重新创建页面的以前状态,然后显示更改。

在某些情况下,即使禁用了viewstate,某些控件也会像启用viewstate一样工作。这是因为一些控件具有所谓的“控制状态”。它几乎像viewstate一样运行,除非它不能被禁用。这是因为如果没有它,某些控件将停止正常运行。

在您发布的示例中,我认为您正在观察在回发期间下拉列表的选定值将被发布到服务器。并不是说它是从视图状态重建的。

林添加此信息,我从以下链接找到: http://aspnetresources.com/articles/ViewState

什么是这个故事的寓意是什么?您并不总是需要启用视图状态才能保持页面状态。 “我什么时候需要它?那么它是什么?”很高兴你问。参与视图状态的主要候选者是那些不回发HTTP表单和控件动态添加或填充的控件。

扫描到文档的该部分,你应该找到你要找的。

+0

好吧,我现在了解控制状态。但是实际上需要ViewState的例子是什么?我看不到控制值以外的表单需要什么。 – Petras

+0

看到我更新的答案 –

相关问题