在Umbraco 4.11.10中遇到剃须刀宏的问题,真让我难过,
问题:
在执行剃刀脚本时,在文本框多行字段中包含html元素会“中断”属性边界。
更多详情:
基本宏有一个textbox multiple字段,作为参数传递给razor脚本。
使用纯文本时效果很好,但最近的要求要求在各个点添加标记。
我尝试了什么:
最初我试图像这样转发html
>sup<1,2>/sup<
这很有效,直到我重新加载节点并重新发布,在查看数据库时,似乎第一次保存宏时,正确的转义html包含在宏参数中:
description="(text here)>sup<1,2>/sup<(more text)" ...
当重新加载节点时,渲染的输出是实际的html字符(假设在umbraco后端显示之前将其解码)。
<sup>1,2</sup>
当重新发布时,“按原样”传递给Razor宏。
description="SINGLE (n=833) <sup>1,2</sup>
然后从第一个html标记的末尾输出到宏参数的末尾作为其输出:
<p> ***+ ***vs ***(Should Stop Here)" hideBorder="0" preview="0" /></p>
应该是
blah blah blah + * * vs * (应该停在这里)“hideBorder =”0“preview =”0“/&gt;
问题:
我的问题是,有什么方法可以在用作剃刀参数时将html元素添加到文本框中,或者在重新加载节点时停止解码的方法。
由于传统和影响,我宁愿不改变宏/参数,如果可能的话,但是如果它必须是必须的那样。
感谢您花时间阅读!
答案 0 :(得分:4)
我遇到了类似的问题,我希望通过将textMultiLine作为参数的宏直接将HTML / Javascript插入到RTE中。
在没有转义标签的情况下获取标签的解决方案是:
@Html.Raw(HttpUtility.HtmlDecode(Parameter.Code));
答案 1 :(得分:1)
最后,我决定使用RegEx的辅助函数来替换自定义的html元素键,例如$ gt $ for&gt;和$ lt $ for&lt;。
$lt$span$gt$1,2,3 $lt$/span$gt$
它是一个丑陋的解决方案但是我不得不恢复多个DocTypes(而不是宏)或RichTextEditor属性,这也解决了这个问题。
希望它可以节省一些人不必浪费尽可能多的时间。