GridView 放在 ContentPlaceHolder 中,單獨頁面正常,套用母版頁後:點擊「編輯」→修改數據→點擊「更新」→ **GridView 消失,數據未更新,RowUpdating 事件未觸發**。
GridView 或其父容器設置了 EnableViewState="false"。
DataKeyNames、EditIndex、SortExpression、分頁狀態等關鍵數據。<%@ Page EnableViewState="false" %> 或母版頁 <%@ MasterPage EnableViewState="false" %>。.aspx 頁面指令:確保 EnableViewState="true"(默認)。.master 母版頁指令:同理。EnableViewState="false"。EnableViewState="false"。web.config:<pages enableViewState="true">。<%@ Page Title="MastPage" Language="vb" AutoEventWireup="false"
MasterPageFile="~/Site1.Master" CodeBehind="Custmor.aspx.vb"
Inherits="CRM_Seetop.Custmor" EnableViewState="true" %> <!-- 關鍵:顯式開啟 -->
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:GridView ID="gvCustmor" runat="server" EnableViewState="true" ... > <!-- 關鍵 -->
<Columns>...</Columns>
</asp:GridView>
</asp:Content>
單獨頁面無母版頁,默認 EnableViewState=true。套用母版頁後,若母版頁或內容頁關閉 ViewState,則繼承關閉狀態。
| 功能 | 依賴 ViewState 的字段 | 關閉後果 |
|---|---|---|
| 編輯/更新 | EditIndex, DataKeys | RowEditing/RowUpdating 不觸發,數據鍵丟失 |
| 分頁 | PageIndex, PageSize | PageIndexChanging 後跳回首頁 |
| 排序 | SortExpression, SortDirection | Sorting 事件失效 |
| 刪除 | DataKeys | RowDeleting 無主鍵值 |
Page_Load 重新綁定數據源,並在 RowEditing、RowDeleting 等事件中**手動從 Request.Form 獲取鍵值**,不依賴 DataKeys。web.config 或基類 PageBase 中強制 EnableViewState = true。GridView 在 MasterPage 中更新失效、**90% 是 ViewState 被關閉**。檢查頁面、母版頁、控件、容器、web.config 五個層級的 EnableViewState 設置,確保鏈路上全部為 true。ViewState 是 WebForms 狀態管理的基石,GridView 深度依賴它。