2012-05-04 21 views
1

私はasp.netプロジェクトの最後の〜6ヶ月間、別のコントロールでロードされていた.aspxの1つでした。このページとそれらのコントロールには独自のUpdatePanelsなどがありました。言い換えれば、私は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を使用する必要があります。 「最初のノード」をクリックします。 ユーザーコントロールには2つのタブが読み込まれます。 2番目のタブを選択します。 「2番目のノード」をクリック 「2番目のタブ」がすでに選択された状態で、ユーザーコントロールが再度読み込まれます。

これはviewstate/controlstateの問題ですか、それともTabPanelのAJAX部分と関係していますか?

ここで何が起きているのか、どうすればこの機能を無効にできるのか、誰かが気をつけてくれたら本当に感謝しています。

おかげで、 マイク

答えて

0

アクティブなタブの値はビューステートに格納されていません。これは、ASP.NET AJAXフレームワークと関係があると思われ、値はポストデータからロードされています。

TabContainerから派生し、ActiveTabIndexが変更されないようにLoadClientStateメソッドをオーバーライドする動作を変更するには。

あなたはCodePlexの上のタブコンテナのソースコードを表示できます。 http://ajaxcontroltoolkit.codeplex.com/SourceControl/changeset/view/1014bf767f65#Server%2fAjaxControlToolkit%2fTabs%2fTabContainer.cs