我有以下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,它在回发时保留了数据,因此不需要再次绑定数据?
答案 0 :(得分:1)
是否因为启用了viewstate,它保留了数据 在回发上,因此不需要再次绑定数据?
完全。没有viewstate,每个请求都是一个新的请求,不知道它之前的请求。
您可以阅读此内容以了解详情:https://msdn.microsoft.com/en-us/library/ms972976.aspx