我正在使用html templte发送邮件,如下所示。
<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模板中删除这些字段。例如,如果表中没有地址,我想删除地址 {地址} 来自模板。
我使用了以下代码:
strContent = strContent.Replace("<strong>" + Address + "</strong><br />", " ");
strContent = strContent.Replace("{" + Address + "}<br />", "");
代码工作正常但它不会删除break新行。我的意思是Lastname和Birthdate之间有两个空行。那么如何删除这两个空白行。
我使用以下代码删除了断行,但它删除了所有字段中的所有断行。
strContent = strContent.Replace("<br />", " ");
答案 0 :(得分:0)
您的第二个Replace
会替换"{" + Address + "}<br />"
,您实际上正在寻找"{" + Address + "}<br />\r\n<br />"
来删除换行符和后续的<br />
。
答案 1 :(得分: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 />", "");
答案 2 :(得分:0)
有几种方法可以做到这一点。 如果您更喜欢使用html模型,可以使用HTML Agility pack将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的回答更为复杂。