我有一个ASP多行文本框,可以将用户定义的文本保存到数据库中。当我检索数据时,我将其序列化为xml,然后通过XSL转换运行它以输出我的HTML。
在我的转换中,我通过元素的onclick事件将文本框定义的数据传递给javascript函数。
我遇到的问题...当用户将回车符输入文本框并将其保存到数据库时,会在页面加载时生成javascript错误。
我正在使用.NET的XslCompiledTransform
进行转换。 XmlDocument
上有一个名为PreserveWhiteSpace
的属性,默认为false,可以设置为去除XML中的空格。这解决了不允许用户输入中断文本的问题,但是,如果可能的话,客户端希望保留他们输入的文本的格式。
据我所知,.NET XslCompiledTransform
将回车符 - 新行转换为

。我相信这些是打破javascript的角色。
我的第一个想法是在将字符串传递给javascript函数之前去除xsl中的回车符,但是我无法找出要搜索字符串的字符。
我想另一个问题是,哪些字符存储在SQL中以便从ASP.NET文本框控件中返回回车?
直接查看数据库中的数据,SQL似乎将字符显示为“不可显示”字符或(2个空框)。
有没有人有这类事情的经验?
答案 0 :(得分:0)
我能够在后面的代码中执行此操作以获得我想要的结果:
using (StringWriter sWriter = new StringWriter())
{
xTrans.Transform(xDoc, xslArgs, sWriter);
return sWriter.ToString().Replace("
", "\\r\\n");
}
答案 1 :(得分:0)
另一件我偶然发现的事情......
最初,我想找到一个不需要“编译”代码更改的问题的解决方案,即。一种在xsl中执行此操作的方法,即“短期修复”。
我先尝试过这个并没有成功......
<xsl:variable name="comment" select="normalize-space(.\Comment)" />
这基本上什么也没做,我仍然收到了javascript错误。
最后,我试过了......
<div onclick="Show('{normalize-space($comment)}'"></div>
第二个实际上是在剥离空白区域,因此,避免了javascript错误。这不是我的要求的完整解决方案,因为它只解决了javascript错误的问题,但是,它会有效地阻止用户“破坏”页面。
因此,它可以作为短期解决方案。