Umbraco Razor html逃避问题

时间:2013-11-06 17:06:20

标签: razor macros umbraco

在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元素添加到文本框中,或者在重新加载节点时停止解码的方法。

由于传统和影响,我宁愿不改变宏/参数,如果可能的话,但是如果它必须是必须的那样。

感谢您花时间阅读!

2 个答案:

答案 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属性,这也解决了这个问题。

希望它可以节省一些人不必浪费尽可能多的时间。