2010-06-30 2 views
1

asp : Panel 및 asp : TreeView를 사용하여 탭으로 구성된 사용자 인터페이스를 만들려고합니다. 두 TreeViews 백그라운드에서 초기화 된 유지하고 있어요 하나를 표시해야 할 때 패널을 지우고 적절한 TreeView 추가하십시오.System.Web.UI.Controls.ControlCollection.Add Throws ArgumentOutOfRangeException

포스트 백 때문에 페이지가 다시로드 될 때 멀리 가지 않도록 Session 변수에 저장된 TreeView를 유지합니다.

그러나 컨트롤을 추가하려고하면 ArgumentOutOfRangeException이 발생합니다. 중요한 코드의 작은 스 니펫은 다음과 같습니다.

<asp:UpdatePanel UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
    <asp:LinkButton ID="ContentButton" OnClick="ContentButton_Click" Text="Contents" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:UpdatePanel UpdateMode="Conditional" runat="server"> 
    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID="ContentButton" /> 
    </Triggers> 
    <ContentTemplate> 
    <div id="TOCPanel" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

여기에 C# 파일의 관련 코드가 있습니다.

protected void IndexButton_Click(object sender, EventArgs e) 
{ 
    TOCPanel.Controls.Clear(); 
    // _TreeView points to a property that retrieves the TreeView from Session["TreeView"] 
    TOCPanel.Controls.Add(_TreeView); // This line fails 
    // TOCPanel.Controls.Add(new TreeView()); // This fails with the same error message too 
} 

이 어떤 이유

+0

div 대신 을 사용할 때도 같은 오류가 발생합니까? –

+0

같은 일을합니다. 하지만 내가 컨트롤을 변경하면 그것은 단지 충돌하는 것 같습니다. 그래서 초기화에서는 페이지로드 중에 첫 번째 TreeView를 추가합니다. 버튼을 누르면 컨트롤이 변경되고 충돌이 발생합니다. 현재로드 된 버튼을 누르면 충돌이 발생하지 않습니다. –

답변

0

문제가 무엇인지 확실하지,하지만 나는 ContentTemplate에 모두 트 리뷰를 추가 한 다음, 눈에 보이는 속성을 보여주는/숨기기 좋을 것. 이것은 세션에 대한 의존성을 제거합니다. 수동으로 컨트롤을 추가하거나 제거하는 것이 지저분 해지는 것을 발견했습니다. 특히 ViewState를 다룰 때 더욱 그렇습니다.

관련 문제