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

时间:2017-09-08 20:30:01

标签: c# asp.net webforms

我正在使用DataSet显示数据库中的选定字段。

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

上述格式不正确吗?很清楚我想要做什么 - 但编译器要求;

我不知道为什么。

2 个答案:

答案 0 :(得分:1)

您尚未正确处理报价。如果需要双引号属性,则需要使用反斜杠转义嵌入式双引号。

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

然后在您的代码中,检索文章集合并将它们绑定到转发器。

网络表单

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

答案 1 :(得分:0)

您使用的是哪种语言?对于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>"

......看起来仍然不会给你真正想要的东西。