我想创建一个带有占位符的XML或HTML模板,用于在异常发生时在运行时交换异常报告变量。我喜欢到目前为止我对模板和行为所做的一切,但目前一切都是硬编码的,太糟糕了。
这是我的代码示例。。。
'Styling (Outlook does not follow CSS standards >:-( )
body = "<html><head>" & _
"<style type=""text/css"">" & _
" * {font:12px Arial, Helvetica, sans-serif;}" & _
" table {border-collapse:collapse;}" & _
" table.grid td {padding:0 7px;border:solid #ccc 1px;}" & _
" .bold {font-weight:bold;padding-right:12px;}" & _
"</style></head><body>"
'Partial template
body &= "<table><tr><td class=""bold"">Error:</td><td>" & ex.Message & "</td></tr>" & _
"<tr><td class=""bold"">Exception:</td><td>" & ex.GetType().FullName & "</td></tr>" & _
"<tr><td class=""bold"">Source:</td><td>" & ex.Source & "</td></tr>" & _
"<tr><td class=""bold"">Request Url:</td><td>" & Request.Url.ToString & "</td></tr></table><br />"
注意ex.Message
变量等。我想将所有HTML代码移动到一个单独的文件中(XML或HTML,取决于推荐的内容,我想是XML?),以及每个错误变量的占位符。然后加载模板,替换变量并即时发送电子邮件。这样做的最佳做法是什么?
此外,请不要试图修复我的CSS,这不是这个问题的意义所在。Outlook不遵循标准(见图),这就是我必须做的。
谢谢。)
我认为你已经走上了正确的道路。步骤是:
- 将模板提取到资源文件中(资源扩展名.xml,.html是实际的资源类型)
- 用标记替换变量串联;因此:(…)
<tr><td class="bold">Source:</td><td>{exSource}</td></tr>
(…) -
创建一个String对象的扩展方法来"增强"
String.Format
,这样你就可以做一些类似的事情' Load the resourceFile and put content into formattedBody Dim formattedBody as String = templateBody.FormatWith(New With{.exSource = ex.Source})
关于如何实现FormatWith
,请看这里。这个答案可能对你也有帮助。