You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>转义成实体字符,到时候邮件里会显示成&lt;br&gt;而不是真正的换行。

方法2:在工作流中提前处理内容(更灵活)

如果邮件模板里没法直接写Razor代码,你可以在Email活动前面加一个Set Variable活动:

  • 给变量起个名字,比如ProcessedMessage
  • 变量值用表达式替换所有换行:
    Replace(Replace(Request.Form:Message, "\r\n", "<br>"), "\n", "<br>")
    
    这个表达式先处理Windows风格的\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:37:45