0

我正在使用 html 模板发送邮件,如下所示。

<br />
<strong>FirstName</strong><br />
{FirstName}<br />
<br />
<strong>LastName</strong><br />
{LastName}<br />
<br />
<strong>Address</strong><br />
{Address}<br />
<br />
<strong>BirthDate</strong><br />
{BirthDate}<br />
<br />

在这里,我从数据库表中获取值并用 {FirstName}、{LastName}、{Address} 和 {BirthDate} 替换相应的值。

现在如果数据库表中没有任何字段的值,那么我想从 html 模板中删除这些字段。例如,如果表中没有地址,我想从模板中删除地址 {Address}。

我使用了以下代码:

 strContent = strContent.Replace("<strong>" + Address + "</strong><br />", " ");
 strContent = strContent.Replace("{" + Address  + "}<br />", "");

代码工作正常,但它不会删除换行符。我的意思是 Lastname 和 Birthdate 之间有两个空行。那么如何删除这两个空行。

我已使用以下代码删除断线,但它会从所有字段中删除所有断线。

  strContent = strContent.Replace("<br />", " ");
4

3 回答 3

0

这与非优雅的解决方案一样简单,但可能适用于您的情况:

<strong><br />FirstName</strong><br />
    {FirstName}<br />

    <strong><br />LastName</strong><br />
    {LastName}<br />

    <strong><br />Address</strong><br />
    {Address}<br />

    <strong><br />BirthDate</strong><br />
    {BirthDate}<br />
    <br />

你的代码:

strContent = strContent.Replace("<strong><br />" + Address + "</strong><br />", " ");
strContent = strContent.Replace("{" + Address  + "}<br />", "");
于 2013-11-07T12:47:49.287 回答
0

有几种方法可以做到这一点。如果您更喜欢使用 html 模型,则可以使用HTML Agility 包将 HTML 作为 DOM 进行处理。当然,这是一个新的 API。

否则,我会看到两个选项:如果您需要更改模板,则需要进行一些需要调整的字符串操作,或者使用两个模板,并让地址的存在与否决定使用哪个模板。

如果您决定使用字符串操作,那么我建议在 HTML 模板中添加一些标记,以便轻松找到每个字段的起点和终点:

<br />
<strong>FirstName</strong><br />
{FirstName}<br />
<br />
<strong>LastName</strong><br />
{LastName}<br />
<br />
<div id="addressField">
    <strong>Address</strong><br />
    {Address}<br />
    <br />
</div>
<strong>BirthDate</strong><br />
{BirthDate}<br />
<br />

然后你可以做这样的事情:

int addressStartIdx = strContent.IndexOf(@"<div id="addressField">");
int addressCount = strContent.Substring(addressStartIdx).IndexOf(@"</div>");
// IndexOf gives the position of the first character of the string,
// so we need to account for the rest of the string
addressCount += @"</div>".Length;     

strContent = strContent.Remove(addressStartIdx, addressCount);

不过,这比 CodeCaster 的回答更复杂。

于 2013-11-07T13:08:25.603 回答
0

您的第二个Replace替换"{" + Address + "}<br />",您实际上正在寻找"{" + Address + "}<br />\r\n<br />"删除换行符的地方,然后<br />是。

于 2013-11-07T12:43:00.210 回答