0

我有一个 ASP 多行文本框,可以将用户定义的文本保存到数据库中。当我检索数据时,我将其序列化为 xml,然后通过 XSL 转换运行它以输出我的 HTML。

在我的转换中,我通过元素的 onclick 事件将文本框定义的数据传递到 javascript 函数中。

我遇到的问题...当用户在文本框中输入回车并将其保存到数据库时,页面加载时会生成一个 javascript 错误。

我正在使用 .NETXslCompiledTransform进行转换。XmlDocument在called上有一个属性PreserveWhiteSpace,默认为 false,可以设置为去除 XML 中的空白。这解决了不允许用户输入中断文本的问题,但是,客户端希望尽可能保留他们输入的文本的格式。

据我所知,.NETXslCompiledTransform将回车换行转换为

. 我相信这些是破坏 javascript 的字符。

我的第一个想法是在将字符串传递给 javascript 函数之前去除 xsl 中的回车符,但我无法弄清楚要“搜索”字符串的字符。

我想另一个问题是 SQL 中存储了哪些字符以用于从 ASP.NET 文本框控件中返回回车?

直接查看数据库中的数据,SQL 似乎将字符显示为“不可显示”字符或(2 个空框)。

有没有人有过这种事情的经验?

4

2 回答 2

0

我偶然发现的另一件事...

最初,我想找到一个不需要“编译”代码更改的解决方案,即。一种在 xsl 中执行此操作的方法,即“短期修复”。

我首先尝试了这个,但没有成功......

<xsl:variable name="comment" select="normalize-space(.\Comment)" />

这基本上什么也没做,我仍然收到 javascript 错误。

最后,我尝试了这个......

<div onclick="Show('{normalize-space($comment)}'"></div>

第二个实际上是在去除空白区域,因此避免了 javascript 错误。这不是我要求的完整解决方案,因为它只解决了 javascript 错误的问题,但是,它会有效地防止用户“破坏”页面。

因此,它可以作为短期解决方案就足够了。

于 2011-02-07T22:26:02.833 回答
0

我能够在后面的代码中执行此操作以获得我想要的结果:

using (StringWriter sWriter = new StringWriter())
        {

            xTrans.Transform(xDoc, xslArgs, sWriter);

            return sWriter.ToString().Replace("&#xD;&#xA;", "\\r\\n");
        }
于 2011-02-07T20:48:31.967 回答