【问题标题】:Create two sets of lists, each list has a header and then a list of items创建两组列表,每个列表都有一个标题,然后是一个项目列表
【发布时间】:2013-11-08 07:08:48
【问题描述】:

我想知道 .net 中两个 4 列 html 链接列表的最佳方法是什么?

列表将基于表格中的数据 - 选择一个类别,然后选择该类别中的每个子类别。已经有相应的 html 标记。

我可以在代码中非常简单地做到这一点,只需构建一个字符串。但我想知道是否有更好的方法来处理它。其中一个数据控件是否适用于此?我更喜欢尽可能使用控件,而不是仅仅构建原始 html 字符串。另外,我只是想知道处理此类事情的最佳方法是什么。

如果重要的话,基础数据看起来像这样: 类别表和产品表。使用产品表,所以我只选择其中包含项目的类别。还有另一个表 categoryrelationship,它定义了父子关系,即类别和子类别。产品表有一个链接到类别表的类别和子类别列。

html 基本上是这样的:

<div class="out-wrapper">
<h3> categoryName /<h3>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<h3> categoryName /<h3>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<h3> categoryName /<h3>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<h3> categoryName /<h3>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
</div>

<div class="out-wrapper">
<h3> categoryName /<h3>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<h3> categoryName /<h3>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<h3> categoryName /<h3>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<h3> categoryName /<h3>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
<a href=""> subcat name</a>
</div>

【问题讨论】:

  • 似乎这很适合 html table 标签:你有列,数据最初来自数据库。这是标签的有效语义用途。

标签: asp.net


【解决方案1】:

如果您更喜欢使用控件,可以将Repeater 嵌套在Listview 中,例如:

HTML

<asp:ListView ID="ListView1" runat="server" DataSourceID="LinqDataSource"
            ondatabound="ListView1_DataBound">
     <ItemTemplate>
         <h3><%# Eval("categoryName") %></h3>
         <asp:HiddenField ID="HdnId" runat="server" Value='<%# Eval("categoryID") %>' />
     </ItemTemplate>
     <asp:Repeater ID="NestedRepeater" runat="server">
        <ItemTemplate>
        <a href=''><%# Eval("subcat") %></a>
        </ItemTemplate>
     </asp:Repeater>
</asp:ListView>

代码隐藏

protected void ListView1_DataBound(object sender, EventArgs e)
{
    GetCategories();
}

private void GetCategories()
{
    DataContext db = new DataContext();

    using (db)
    {

        foreach (ListViewItem item in ListView1.Items)
        {
            Repeater rpt = (Repeater)item.FindControl("NestedRepeater");
            HiddenField hdn = (HiddenField)item.FindControl("HdnId");

            var nest = from i in db.categories
                       where i.catid == Convert.ToInt32(hdn.Value)
                       select new
                       {
                           i.subcat_name
                       };

            rpt.DataSource = nest;
            rpt.DataBind();
        }
    }
}

想法是将 ID 存储在隐藏字段中,然后使用它来检索子类别。

这纯粹只是一个示例,也是使用嵌套控件的一种可能方式。

【讨论】:

  • 也许这应该是一个单独的问题,但我不熟悉使用 LINQ。我明白你在说什么。虽然没有使用 LINQ,但我不确定如何在不多次调用数据库的情况下做到这一点——每个类别一次。我刚刚注意到的另一件事-我需要两个列表视图/中继器组合才能使其工作,因为我想要两组 4 个列表,或者我是否在您的代码中遗漏了允许这样做的内容?谢谢。
  • 没关系 - 阅读列表视图的 groupitem 属性。仍然必须进行多次(某种)数据库调用,但这对我来说不是什么问题,因为我真正想要的数据无论如何都会被缓存。接受您的回答 - 谢谢
猜你喜欢
  • 2023-03-17
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
相关资源
最近更新 更多