【问题标题】:Viewstate and TabPanelViewstate 和 TabPanel
【发布时间】:2012-05-04 15:19:06
【问题描述】:

过去大约 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 部分有关?

如果有人能阐明这里发生的事情以及如何关闭此功能,我真的很感激。

谢谢, 迈克

【问题讨论】:

    标签: asp.net ajaxcontroltoolkit viewstate


    【解决方案1】:

    活动选项卡的值未存储在视图状态中。它似乎与 ASP.NET AJAX 框架有关,并且该值是从发布数据中加载的。

    要更改行为,您可以从 TabContainer 派生并覆盖 LoadClientState 方法,以便不更改 ActiveTabIndex。

    您可以在 codeplex 上查看 TabContainer 的源代码: http://ajaxcontroltoolkit.codeplex.com/SourceControl/changeset/view/1014bf767f65#Server%2fAjaxControlToolkit%2fTabs%2fTabContainer.cs

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 2017-05-15
      相关资源
      最近更新 更多