2012-02-16 41 views
0

我有這樣的事情:嵌套ASP.NET的ListView + jQuery的.show().hide()持久性

<div> 
    <asp:ListView> 
     <div> 
      <asp:ListView> 
       <div> 
        <asp:ListView> 
        </asp:ListView> 
       </div> 
      </asp:ListView> 
     <div> 
    </asp:ListView> 
</div> 

當然,以上僅僅是僞代碼,但基本上是這樣的。 DataBound ListViews的三級(每個連接到一個SqlDataSource)。 我所有的列表視圖充分利用控制的內置功能,這意味着選擇/插入/更新/通過SqlDataSource刪除都在的.aspx(ItemCommand)。我沒有任何代碼隱藏。

我想要做的就是讓這種分層的ListView變得像使用JQuery一個TreeView。我的第一個步驟是.show()/.hide()孩子列表視圖,但正如所料,當回傳發生時,.show()/.hide()狀態不會持續。

我對使用<asp:HiddenField>期間OnItemCommand從到的jQuery的document.ready期間使用的列表視圖設置爲嘗試,但我認爲這將是一個.FindControl()地獄。

你心裏有一個優雅的解決方案嗎?

+0

爲什麼你認爲的FindControl是地獄? – 2012-02-16 07:20:08

回答

1

如何使用服務器隱藏的投入,這將持續狀態後在背上,然後有一個初始化腳本後恢復運行後,將重新分配的知名度。這是一些傳達想法的代碼(未經測試)。如果你不喜歡所有隱藏的輸入,我們可以將它們打包並解析出來,但這比下面的解決方案更有用。

<div> 
    <asp:ListView> 
     <div> 
      <asp:HiddenField id="level2IsVisible" value="true" class="algc-level-visiblity" /> 
      <asp:ListView> 
       <div> 
        <asp:HiddenField id="level3IsVisible" value="true" class="algc-level-visiblity" /> 
        <asp:ListView> 
        </asp:ListView> 
       </div> 
      </asp:ListView> 
     <div> 
    </asp:ListView> 
</div> 


<script type="text/javascript"> 

// Initialization logic 
$(function(){ 
    $("input.algc-level-visiblity").each(function() { 
    if ($(this).val()) 
     $(this).closest("div").show(); 
    else 
     $(this).closest("div").hide(); 
    // TODO: Add other rules that dictate parent div visibility toggle. 
    }); 
}); 

</script> 
+0

我認爲所有的行都可以通過腳本摺疊/展開...... – Madhu 2012-02-16 07:41:56