Orchard Workflows - 在 textarea 中保留文本格式

Orchard Workflows - keep format of text in textarea

我有一个工作流,在提交包含文本区域的表单时发送电子邮件。

我的问题是在发送电子邮件时,输入到文本区域的内容格式丢失(例如回车 returns / 段落)。

有没有办法让内容与用户输入的完全一样?目前我是用这个输出Email里的内容activity:

<p>Message:<br/>
{Request.Form:Message}</p>

它是 运行 Orchard 1.10.2。非常感谢任何帮助!

编辑

如果您使用动态表单,此语法将起作用:

FormSubmission.Field:Message.LineEncode

如果它是您自己的表单,恐怕它看起来像是 Orchard 中的一个错误,其中 Request.Form 的链接值实际上是检索命名查询字符串参数。要对此进行排序,您必须编辑源文件:Orchard.Tokens.Providers.RequestTokens.

添加新方法:

private static Tuple<string, string> FilterChainParam(string token, string tokenType) {
    if(token.StartsWith(tokenType, StringComparison.OrdinalIgnoreCase)) {
        return FilterChainParam(token);
    }

    return null;
}

然后在Evaluate方法中替换这一行:

.Chain(FilterChainParam, "Text", (token, request) => request.QueryString.Get(token))

这些行:

.Chain((token) => FilterChainParam(token, "QueryString"), "Text", (token, request) => request.QueryString.Get(token))
.Chain((token) => FilterChainParam(token, "Form"), "Text", (token, request) => request.Form.Get(token))
.Chain((token) => FilterChainParam(token, "Route"), "Text", (token, request) => GetRouteValue(token, request))

不是特别漂亮,但很管用。您现在可以如下使用(注意 表单字段周围的括号)

原创

您的表单将只包含新行 (\n),电子邮件客户端将忽略这些行。您需要用换行符替换它们。幸运的是有人想到了这一点,并且在 Orchard 中有一个标记:LineEncode。将您的电子邮件 activity 更改为:

<p>Message:<br/>
{Request.Form:(Message).LineEncode}</p>