2012-05-04 4 views
1

저는 지난 6 개월 동안 asp.net 프로젝트에서 작업했습니다.이 컨트롤은 다른 컨트롤로로드 된 .aspx 파일이었습니다. 이 페이지와 컨트롤에는 자체 UpdatePanels 등이있었습니다. 즉, viewstate 문제의 가방을 처리해야했습니다. 내가 viewstate와 그 세부 사항을 완전하게 얻는다라고 생각할 때마다 나는 내가 아래에서 기술 할 것 인 무엇인가 얻는 것처럼 보인다. 이것은 제어 상태와 관련이있을 수 있습니다. 제어 상태는 내가 "필요한"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를 사용해야합니다. "첫 번째 노드"를 클릭하십시오. 사용자 정의 컨트롤에는 두 개의 탭이로드됩니다. 두 번째 탭을 선택하십시오. "두 번째 노드"를 클릭하십시오 "두 번째 탭"이 이미 선택되어있는 상태에서 사용자 컨트롤이 다시로드됩니다.

viewstate/controlstate에 문제가 있습니까? 아니면 TabPanel의 AJAX 부분과 관련이 있습니까?

누군가가 여기에서 무슨 일이 일어나고 있는지, 내가 어떻게이 기능을 끌 수 있는지에 관해 알려주면 정말 고맙습니다.

덕분 마이크

답변

0

능동 탭의 값은 뷰 상태에 저장되는 것은 아니다. ASP.NET AJAX 프레임 워크와 관련이 있으며 값이 포스트 데이터에서로드되고있는 것으로 보입니다.

TabContainer에서 파생 될 수있는 동작을 변경하고 ActiveTabIndex가 변경되지 않도록 LoadClientState 메서드를 재정의하십시오.

당신은 코드 플렉스에있는 TabContainer의 소스 코드를 볼 수 있습니다 http://ajaxcontroltoolkit.codeplex.com/SourceControl/changeset/view/1014bf767f65#Server%2fAjaxControlToolkit%2fTabs%2fTabContainer.cs