如何将样式定义附加到<;TD>;使用StringBuilder在字符串中标记

本文关键字:使用 gt StringBuilder 字符串 TD lt 样式 定义 | 更新日期: 2023-09-27 18:01:05

我正在从C#类型的列表构建一个HTML表。到目前为止,构建表还可以正常工作,但我现在需要将样式附加到构建表的字符串中的一个<TD>标记上。

我所尝试的只是在使用字符串生成器将样式定义附加到字符串时,将其添加到TD中。但我在使用样式定义时遇到语法错误。

问题:如何将样式定义附加到字符串中的标记?

我使用字符串生成器字符串实例创建表体:

StringBuilder releaseStatusTableBodyData = new StringBuilder();

然后在表字符串中添加一行和一列。删除样式中的双引号也没有删除显示的语法错误:

        foreach(var row in releaseStatusList)
        {
            //for each record create a new table row
            releaseStatusTableBodyData.Append("<TR>'n");

            releaseStatusTableBodyData.Append("<TD style=""bgcolor: green;"">");  //added the style to the TD here, but get syntax error on the style telling me ) is required.
            releaseStatusTableBodyData.Append(row.Days_Owned);
            releaseStatusTableBodyData.Append("</TD>");

            releaseStatusTableBodyData.Append("</TR>'n"); //end of row
        }

如何将样式定义附加到<;TD>;使用StringBuilder在字符串中标记

在字符串的开头放一个逐字逐句的文字(@(。

releaseStatusTableBodyData.Append(@"<TD style=""background-color: green;"">");
                                 ^^^

从某些背景来看,在字符串中添加转义字符串似乎更容易,但对我来说,这更容易阅读。

也许也值得尝试HtmlTextWriter。它本质上是在做同样的事情,只需要一些特定于HTML的帮助。

string html;
using (var sw = new StringWriter())
using (var hw = new HtmlTextWriter(sw))
{
    hw.RenderBeginTag(HtmlTextWriterTag.Tr);
    hw.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "green");
    hw.RenderBeginTag(HtmlTextWriterTag.Td);
    hw.RenderEndTag();
    hw.RenderEndTag();
    html = sw.ToString();
}

有点奇怪的是,在渲染Td标记之前,必须添加样式属性

好的是,您可以使用许多预定义的常量来标记和样式名称。如果你需要一些条件逻辑,这会容易得多。

hw.RenderBeginTag(HtmlTextWriterTag.Tr);
if(makeThisGreen)
    hw.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "green");
if(makeThisBold)
    hw.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold");
hw.RenderBeginTag(HtmlTextWriterTag.Td);
hw.RenderEndTag();
hw.RenderEndTag();

对于StringBuilder,当您达到第二个条件时,您必须检查是否已经启动了style属性,以确保没有创建两次。然后,您必须检查这些条件中的任何一个是否为真,以便知道是否将结束引号添加到style属性中。(或者你可以创建一个方法来完成所有这些工作。(但这项工作已经在HtmlTextWriter类中完成了。

您还可以使用WriteBeginTag(string)WriteEndTag(string),它们使您能够更明确地控制写标签。

foreach(var row in releaseStatusList) {
 //for each record create a new table row
 releaseStatusTableBodyData.Append("<TR>'n").Append("<TD style=color:green>").Append(row.Days_Owned).Append("</TD>").Append("</TR>'n");
}