Orchard Workflows问题:邮件中保留textarea提交文本的格式
解决Orchard Workflows邮件丢失textarea格式的问题
我之前在Orchard 1.10.x版本里也碰到过一模一样的问题——用户在textarea里输入的换行、分段,到了HTML邮件里就全挤成一团了。这其实是因为textarea里的换行是纯文本的\n(Windows环境下是\r\n),但HTML默认不会识别这些纯文本换行符,得把它们转换成HTML能解析的格式才行。针对Orchard 1.10.2的工作流,给你几个可行的解决方案:
方法1:用Orchard内置的换行转换助手
Orchard自带了HtmlLineBreak助手方法,能直接把纯文本换行转成<br>标签。你可以把邮件模板里的代码改成这样:
<p>Message:<br/> @Html.Raw(Html.HtmlLineBreak(Request.Form["Message"]))</p>
一定要加@Html.Raw,不然Orchard会把<br>转义成实体字符,到时候邮件里会显示成<br>而不是真正的换行。
方法2:在工作流中提前处理内容(更灵活)
如果邮件模板里没法直接写Razor代码,你可以在Email活动前面加一个Set Variable活动:
- 给变量起个名字,比如
ProcessedMessage - 变量值用表达式替换所有换行:
这个表达式先处理Windows风格的Replace(Replace(Request.Form:Message, "\r\n", "<br>"), "\n", "<br>")\r\n换行,再处理Unix风格的\n,确保所有换行都被替换成<br>。
之后在Email活动里直接用这个处理好的变量就行:
<p>Message:<br/> {ProcessedMessage}</p>
方法3:用<pre>标签完全保留原始格式
如果需要连用户输入的连续空格、制表符都保留,那可以用HTML的<pre>标签包裹内容,再加点样式让文本自动换行(避免超出邮件宽度):
<p>Message:<br/> <pre style="white-space: pre-wrap; word-wrap: break-word; margin: 0; padding: 0; font-family: inherit;">{Request.Form:Message}</pre> </p>
white-space: pre-wrap会保留原始换行,同时让长文本自动换行,不会破坏邮件的排版。
这几个方法在Orchard 1.10.2里都能正常运行,你可以根据自己的需求选~
内容的提问来源于stack exchange,提问作者ed13
相关产品推荐
相关产品推荐

