过去大约 6 个月,我一直在从事一个 asp.net 项目,该项目是一个加载了不同控件的 .aspx。这个页面和那些控件有它们自己的 UpdatePanel 等等。换句话说,我不得不处理一堆视图状态问题。似乎每当我认为我完全获得了视图状态及其详细信息时,我都会得到类似于我将在下面描述的内容。这可能与控制状态有关,这是我理解的“必要”视图状态,您无法关闭。或者这可能与 AJAX 有关。无论如何看看这个例子:
<%@ 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 在页面级别已关闭,因此任何控件都不应使用 viewstate。单击“第一个节点”。用户控件加载了两个选项卡。选择第二个选项卡。单击“第二个节点”用户控件再次加载,已选择“第二个选项卡”。
这是 viewstate/controlstate 的问题还是与 TabPanel 的 AJAX 部分有关?
如果有人能阐明这里发生的事情以及如何关闭此功能,我真的很感激。
谢谢,迈克