为什么EnableViewState = true意味着Gridview不会在回发上运行事件?

时间:2017-12-15 15:51:07

标签: asp.net http gridview

我有以下ASP.NET标记:

<asp:SqlDataSource ID="dsTest"
                   runat="server"
                   SelectCommand="SELECT * FROM Test"
                   ConnectionString="<%$ ConnectionStrings:DefaultConnection %>">
</asp:SqlDataSource>

<asp:GridView   ID="gvTest"
                runat="server"
                DataSourceID="dsTest"
                AutoGenerateColumns ="true"
                OnDataBound="gvTest_DataBound"
                OnDataBinding="gvTest_DataBinding"
                OnRowDataBound="gvTest_RowDataBound">
</asp:GridView>

<asp:Button ID="myButton" runat="server" Text="server" OnClick="myButton_Click" />

以及后面的代码:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Page_Load<br />");
}

protected void gvTest_DataBinding(object sender, EventArgs e)
{
    Response.Write("gvTest_DataBinding<br />");
}

protected void gvTest_DataBound(object sender, EventArgs e)
{
    Response.Write("gvTest_DataBound<br />");
}

protected void gvTest_RowDataBound(object sender, EventArgs e)
{
    Response.Write("gvTest_RowDataBound<br />");
}

protected void myButton_Click(object sender, EventArgs e)
{
    Response.Write("myButton_Click<br />");
}

当我加载页面时,我在屏幕顶部显示以下输出:

Page_Load
gvTest_DataBinding
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_DataBound

如果我点击按钮,我会

Page_Load
myButton_Click

如果我将EnableViewState="false"添加到我的gridview标记中,并再次执行相同操作,我会

Page_Load
gvTest_DataBinding
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_DataBound

初始页面加载,

Page_Load
myButton_Click
gvTest_DataBinding
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_RowDataBound
gvTest_DataBound
单击按钮后

为什么启用视图状态意味着gridview不会在回发上进行数据绑定?

是否因为启用了viewstate,它在回发时保留了数据,因此不需要再次绑定数据?

1 个答案:

答案 0 :(得分:1)

  

是否因为启用了viewstate,它保留了数据   在回发上,因此不需要再次绑定数据?

完全。没有viewstate,每个请求都是一个新的请求,不知道它之前的请求。

您可以阅读此内容以了解详情:https://msdn.microsoft.com/en-us/library/ms972976.aspx