我正在使用MailMessage
并希望嵌入一个动态填充的表格来创建电子邮件。我已经设置了一个MailMessage
属性,IsBodyHtml
所以我已经能够将 HTML 编码的文本插入到电子邮件的正文中。使用它我可以轻松地创建表格的顶部和底部,但创建行似乎是一场StringBuilder
噩梦。
该表将有 6 列和可变数量的行,这些行将从集合中填充。请求者不希望将数据作为附件发送。
关于如何最好地开发更好的解决方案的任何建议?
提前致谢
我正在使用MailMessage
并希望嵌入一个动态填充的表格来创建电子邮件。我已经设置了一个MailMessage
属性,IsBodyHtml
所以我已经能够将 HTML 编码的文本插入到电子邮件的正文中。使用它我可以轻松地创建表格的顶部和底部,但创建行似乎是一场StringBuilder
噩梦。
该表将有 6 列和可变数量的行,这些行将从集合中填充。请求者不希望将数据作为附件发送。
关于如何最好地开发更好的解决方案的任何建议?
提前致谢
这根本不是一场StringBuilder
噩梦。
您可以构建一个类,调用它TableBuilder
或任何您想要的,这将封装这个逻辑。
public class TableBuider
{
private StringBuilder builder = new StringBuilder();
public string[] BodyData { get; set; }
public int BodyRows { get; set; }
public TableBuider(int bodyRows, string[] bodyData)
{
BodyData = bodyData;
BodyRows = bodyRows;
}
/// <summary>
/// Since your table headers are static, and your table body
/// is variable, we don't need to store the headers. Instead
/// we need to know the number of rows and the information
/// that goes in those rows.
/// </summary>
public TableBuider(string[] tableInfo, int bodyRows)
{
BodyData = tableInfo;
BodyRows = bodyRows;
}
public string BuildTable()
{
BuildTableHead();
BuildTableBody();
return builder.ToString();
}
private void BuildTableHead()
{
builder.Append("<table>");
builder.Append("<thead>");
builder.Append("<tr>");
AppendTableHeader("HeaderOne");
AppendTableHeader("HeaderTwo");
builder.Append("</tr>");
builder.Append("</thead>");
}
private void BuildTableBody()
{
builder.Append("<tbody>");
builder.Append("<tr>");
// For every row we need added, append a <td>info</td>
// to the table from the data we have
for (int i = 0; i < BodyRows; i++)
{
AppendTableDefinition(BodyData[i]);
}
builder.Append("</tr>");
builder.Append("</table");
}
private void AppendTableHeader(string input)
{
AppendTag("th", input);
}
private void AppendTableDefinition(string input)
{
AppendTag("td", input);
}
private void AppendTag(string tag, string input)
{
builder.Append("<" + tag + ">");
builder.Append(input);
builder.Append("</" + tag + ">");
}
}
}
、AppendTableHeader
和方法封装了AppendTableDefinition
.AppendTag
StringBuilder
这也只是一个基本示例,您也可以在此基础上进行构建。
这篇文章是特定于 Lightswitch 的。但是示例代码显示了如何使用 XHTML 和嵌入式 LINQ 表达式来填充 HTML 电子邮件中的可变行表。我认为您应该能够对其进行调整以适合您的应用程序。