我一直在研究一個asp.net項目,歷時約6個月,這是一個.aspx正在加載不同的控制。這個頁面和那些控件有自己的UpdatePanel等等。換句話說,我不得不處理一堆視圖狀態問題。這似乎是每當我認爲我完全得到視圖狀態和它的細節時,我就會得到類似於我將在下面描述的內容。這可能與控制狀態有關,這是來自我所理解的「必要」視圖狀態,您無法關閉。或者這可能需要對AJAX做些什麼。 反正看看這個例子:Viewstate和TabPanel
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" EnableViewState="false" Inherits="ControlDisabledViewStateTesting._Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajx" %>
<!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" >
<head runat="server">
<title></title>
<script language="C#" runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (treeView.SelectedNode != null)
ContentPanel.Controls.Add(ContentPanel.TemplateControl.LoadControl("MyUserControl.ascx"));
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<ajx:ToolkitScriptManager runat="server" />
<asp:TreeView ID="treeView" runat="server">
<Nodes>
<asp:TreeNode Text="First Node" Value="111"/>
<asp:TreeNode Text="Second Node" Value="222"/>
</Nodes>
</asp:TreeView>
<Asp:Panel ID="ContentPanel" runat="server" />
</div>
</form>
</body>
</html>
這裏是用戶控制標記:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyUserControl.ascx.cs" Inherits="ControlDisabledViewStateTesting.MyUserControl" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajx" %>
<ajx:TabContainer ID="tabContainer" ActiveTabIndex="0" runat="server">
<ajx:TabPanel ID="tab" HeaderText="Tab1" runat="server"/>
<ajx:TabPanel ID="tab2" HeaderText="Tab2" runat="server" />
</ajx:TabContainer>
正如您已經注意到,視圖狀態是關閉頁面的水平,所以沒有的控件應該使用viewstate。 點擊「第一個節點」。 用戶控件被載入兩個選項卡。 選擇第二個選項卡。 單擊「第二個節點」 用戶控件再次加載,並且已選擇「SECOND TAB」。
這是viewstate/controlstate問題還是它與TabPanel的AJAX部分有關?
我真的很感激,如果有人可以闡明這裏發生的事情以及我如何關閉此功能。
謝謝, 麥克