动态添加数据库中的html和数据(使用LINQ)

时间:2014-02-01 21:20:53

标签: c# html asp.net linq linq-to-sql

我正在努力实现这样的目标: 见图Here

其中类别列表(以及使用LINQ从数据库中提取各自目标的列表)

我在codebehind中尝试过:

DataClassesDataContext dc = new DataClassesDataContext();

var divcount = (from cnt in dc.dml_np_Categories
                select cnt).Count();

int dv = Convert.ToInt32(divcount);

for (int i = 0; i < dv; i++)
{
    DataClassesDataContext tb = new DataClassesDataContext();
    var ctitle = (from cat in tb.dml_np_Categories
                  where cat.Pk_Category_Id == (i+1)
                  select cat.Category_Title);

    HtmlGenericControl adddiv = new HtmlGenericControl("div");
    adddiv.Attributes.Add("class", "category");
    HtmlGenericControl addh3 = new HtmlGenericControl("h3");
    addh3.Attributes.Add("class", "h3");
    addh3.InnerText = ctitle.ToString();

    catblock.Controls.Add(adddiv);
    adddiv.Controls.Add(addh3);}

我得到以下输出!

参见图片here

我在数据库表中有3个类别,但正如您所看到的,它不是类别标题,而是显示一些sql。

此外,我不知道如何进一步将每个类别下的目标添加为超链接列表<li>

同样需要LINQ查询的帮助。

我知道我已经问了很多,但请帮助我。我正在学习阶段。我自己尝试了一整天,但无法获得理想的结果。

3 个答案:

答案 0 :(得分:1)

您的代码存在一些问题,我会尝试指出它们。你的LINQ表达式返回一个查询,你调用.ToString()就可以得到上面的图像了。如果在查询上调用.First,它将返回结果中的第一项。我猜测查询中只会有一个结果。

//Move this outside of the for-loop
DataClassesDataContext tb = new DataClassesDataContext();
for (int i = 0; i < dv; i++)
    {

        var ctitle = (from cat in tb.dml_np_Categories
                      where cat.Pk_Category_Id == (i+1)
                      select cat.Category_Title).First();

        HtmlGenericControl adddiv = new HtmlGenericControl("div");
        adddiv.Attributes.Add("class", "category");
        HtmlGenericControl addh3 = new HtmlGenericControl("h3");
        addh3.Attributes.Add("class", "h3");
        addh3.InnerText = ctitle.ToString();

        catblock.Controls.Add(adddiv);
        adddiv.Controls.Add(addh3);
}

答案 1 :(得分:1)

您可以使用一个查询简化当前代码,而不是两个(一个用于获取总标题数,另一个用于获取标题列表)。

DataClassesDataContext dc = new DataClassesDataContext();
var ctitle = (from cat in dc.dml_np_Categories
              select cat.Category_Title);
foreach(string title in ctitle)
{
    HtmlGenericControl adddiv = new HtmlGenericControl("div");
    adddiv.Attributes.Add("class", "category");
    HtmlGenericControl addh3 = new HtmlGenericControl("h3");
    addh3.Attributes.Add("class", "h3");
    addh3.InnerText = title;

    catblock.Controls.Add(adddiv);
    adddiv.Controls.Add(addh3);
}

关于另一个问题,关于如何显示每个类别的目标列表,最好是open new question。发布已经用于显示类别标题的最新代码,以及如何从数据库获取目标列表。因为那是另一个问题,目前我们无法对目标做任何说明(没有提供相关信息)。

答案 2 :(得分:0)

您的ctitle不是您想要的类型,这就是您添加ToString()的原因。你写这个

(from cat in tb.dml_np_Categories
                  where cat.Pk_Category_Id == (i+1)
                  select cat.Category_Title).FirstOrDefault(); 

但是做一堆数据库调用是个坏主意。你应该做唯一的,然后遍历结果。