2012-05-04 2 views
1

Я работаю над проектом asp.net last ~ 6 месяцев, где это был один .aspx, который загружался разными элементами управления. Эта страница и те элементы управления имели свои собственные UpdatePanels и т. Д. Другими словами, мне приходилось иметь дело с мешком с представлением о просмотре. Кажется, что всякий раз, когда я думаю, что получаю viewstate и его детали полностью, я получаю что-то вроде того, что я собираюсь описать ниже. Это может быть связано с состоянием управления, которое из того, что я понимаю «необходимым» представлением, вы не можете отключить. Или это может что-то сделать с 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 не выключен на уровне страницы, так что ни один из элементы управления должны использовать viewstate. Нажмите «Первый узел». Пользовательский элемент управления загружается двумя вкладками. Выберите вторую вкладку. Нажмите «Второй узел» Элементы управления пользователя снова загрузятся, и выбранная «SECOND TAB» уже выбрана.

Это проблема с viewstate/controlstate или она имеет какое-то отношение к AJAX-части TabPanel?

Я очень благодарен, если кто-то может пролить свет на то, что здесь происходит, и как я могу отключить эту функцию.

Спасибо, Майк

ответ

0

Значение активной вкладки не хранится в состоянии представления. Похоже, что это связано с инфраструктурой ASP.NET AJAX, и значение загружается из почтовых данных.

Чтобы изменить поведение, которое вы могли бы вывести из TabContainer и переопределить метод LoadClientState, чтобы ActiveTabIndex не был изменен.

Вы можете просмотреть исходный код TabContainer на CodePlex: http://ajaxcontroltoolkit.codeplex.com/SourceControl/changeset/view/1014bf767f65#Server%2fAjaxControlToolkit%2fTabs%2fTabContainer.cs