嵌套 ASP.NET ListView + Jquery .show() .hide() 持久化

发布于 2025-01-05 17:22:15 字数 999 浏览 0 评论 0原文

我有这样的东西:

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

当然上面只是伪代码,但基本上就是这样。 3 级 DataBound ListView(每个都连接到一个 SqlDataSource)。 我的所有 ListView 都充分利用了控件的内置功能,这意味着选择/插入/更新/删除都通过 SqlDataSource 在 .aspx (ItemCommand) 上进行代码>.我没有任何隐藏代码。

我想做的是使用 JQuery 将这个分层 ListView 变成类似 TreeView 的东西。我的第一步是 .show()/.hide() 子 ListView,但正如预期的那样,当发生 PostBack 时,.show() code>/.hide() 状态不会持续存在。

我打算尝试使用 OnItemCommand 期间从 ListViews 中设置,以便在 document.ready 期间由 JQuery 使用,但我认为它会是一个 .FindControl() 地狱。

您心中有一个优雅的解决方案吗?

I have something like this:

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

Of course the above is just pseudo-code, but basically it's like that. 3-Levels of DataBound ListViews (each connected to an SqlDataSource). All my ListViews fully utilize the control's built-in functionalities, meaning Select/Insert/Update/Delete are all on .aspx (ItemCommand) through the SqlDataSource. I do not have any Code-behind.

What I'm trying to do is make this layered ListView into something like a TreeView using JQuery. My first step is to .show()/.hide() the child ListViews but as expected, when a PostBack happens, the .show()/.hide() states don't persist.

I'm about to attempt using <asp:HiddenField> to be set during OnItemCommand from the ListViews to be used by JQuery during document.ready, but I think it will be a .FindControl() Hell.

Do you have an elegant solution in mind?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

往事风中埋 2025-01-12 17:22:15

如何使用服务器隐藏输入,该输入将在回发后保留状态,然后有一个初始化脚本,该脚本将在发生回发后重新分配可见性。这是一些传达这个想法的代码(未经测试)。如果您不喜欢所有隐藏输入,您可以使用一个并将数据打包到某个字符串中并将其解析出来,但这比下面的解决方案需要更多工作。

<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>

How about using server hidden inputs which will persist state over post backs and then have an initialization script that will re-assign visibility after a post back occurs. Here is some code that conveys the idea (untested). If you don't like all of the hidden inputs you could us one and pack the data in some string and parse it out, but this is more work than the solution below.

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文