1

私は過去 6 か月間 asp.net プロジェクトに取り組んできましたが、これは 1 つの .aspx で、さまざまなコントロールが読み込まれていました。このページとそれらのコントロールには、独自の UpdatePanels などがありました。つまり、viewstate の問題に対処する必要がありました。ビューステートとその詳細を完全に取得したと思うときはいつでも、以下で説明するようなものが得られるようです。これは、オフにできない「必要な」ビューステートを理解していることから、コントロールの状態に関係している可能性があります。または、これは 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 を使用しないでください。「最初のノード」をクリックします。ユーザー コントロールには 2 つのタブが読み込まれます。2 番目のタブを選択します。[2 番目のノード] をクリックすると、ユーザー コントロールが再度読み込まれ、[2 番目のタブ] が既に選択されています。

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

ここで何が起こっているのか、この機能をオフにする方法について、誰かが光を当てることができれば本当に感謝しています.

ありがとう、マイク

4

1 に答える 1

0

アクティブなタブの値は、ビューステートに保存されていません。ASP.NET AJAXフレームワークに関係しているようで、値は投稿データから読み込まれています。

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

TabContainerのソースコードはcodeplexで表示できます:http: //ajaxcontroltoolkit.codeplex.com/SourceControl/changeset/view/1014bf767f65#Server%2fAjaxControlToolkit%2fTabs%2fTabContainer.cs

于 2012-07-07T05:37:47.033 に答える