在我的foreach中包含html的格式DataRow

问题描述:

我正在使用DataSet显示数据库中的选定字段。在我的foreach中包含html的格式DataRow

foreach (DataRow row in dsNews.Tables["News"].Rows) 
{ 
    newsTitle.Text += "<dd>"; 
    newsTitle.Text += "<p><a href=""news-edit?id=" + row["newsID"] + """>" + row["newsTitle"] + "</a></p>"; 
    newsTitle.Text += "</dd>"; 
} 

最终它将被用于编辑新闻帖子。

下面的行给我的麻烦:

newsTitle.Text += "<p><a href=""news-edit?id=" + row["newsID"] + """>" + row["newsTitle"] + "</a></p>"; 

是上面的格式不正确?很明显,我想要做什么 - 但编译器要求;

我不知道为什么。

您尚未正确处理您的报价。如果你想要双引号属性,你需要用反斜杠来隐藏嵌入的双引号。

newsTitle.Text += "<p><a href=\"news-edit?id=" + row["newsID"] + "\">" + row["newsTitle"] + "</a></p>"; 

或者更容易切换到您的属性的单引号。它因此变成:

newsTitle.Text += "<p><a href='news-edit?id=" + row["newsID"] + "'>" + row["newsTitle"] + "</a></p>"; 

但是,这是一种将重复内容注入到您的网页的可怕方式。相反,定义一个类来表示你的数据:

public class Article 
{ 
    public int Id { get; set; } 

    public string Title { get; set; } 
} 
在你的代码

然后,检索文章的收集和将它们绑定到一个中继器。

Web窗体

<asp:Repeater runat="server" id="ArticleRepeater" ItemType="MyNamespace.Article"> 
    <ItemTemplate> 
     <p> 
      <a href="news-edit?id=<%#: Item.Id %>"><%#: Item.Title %></a> 
     </p> 
    </ItemTemplate> 
</asp:Repeater> 

代码隐藏

IEnumerable<Article> articles = DataLayer.GetArticles(); 
ArticleRepeater.DataSource = articles; 
ArticleRepeater.DataBind(); 

显然,你需要实现某种形式的数据层,有可能使用ORM如实体框架或微型ORM如Dapper

+0

非常感谢@mason。我不明白你怎么不需要让一个类来读取你的数据?绑定的中继器可以完成相同的工作,然后您可以使用Eval等等。但是,您正在使用的是get;组;只是一个更好的方法呢?谢谢... – davvv

+0

@davvv表示数据的强类型类(模型)在C#中比在DataTable中处理起来要容易得多。绑定到中继器的DataTable将依赖“魔术字符串”来获取列,但您不会收到Intellisense,并且它无法在编译时告诉您列名在Eval调用中是不同步的。它只会在运行时失败。模型也比DataTable使用的内存少得多。 – mason

你在用什么语言?对于C#和Javascript,你不会逃避你的报价。

所以这行:

newsTitle.Text += "<p><a href=""news-edit?id=" + row["newsID"] + """>" + row["newsTitle"] + "</a></p>" 

读取

newsTitle.Text += "<p><a href=" 
"news-edit?id=" + row["newsID"] + "" 
">" + row["newsTitle"] + "</a></p>" 

您有一个分配和两个字符串没有做更多的事情(除了语法错误)

在结束了javascript,你可以通过使用半引号来解决这个问题:

newsTitle.Text += '<p><a href=""news-edit?id=' + row["newsID"] + '"">' + row["newsTitle"] + '</a></p>' 

......这表明了另一个担忧;你的href正在被打开和关闭,没有内容。

在C#中,你可以使用:

newsTitle.Text += "<p><a href=\"\"news-edit?id=" + row["newsID"] + "\"\">" + row["newsTitle"] + "</a></p>" 

...仍然看起来并不像它会给你真正寻找的。

+1

你应该解释如何纠正它。 – mason