我正在使用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>";
上述格式不正确吗?很清楚我想要做什么 - 但编译器要求;
我不知道为什么。
答案 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>"
......看起来仍然不会给你真正想要的东西。