0

ユーザー定義のテキストをデータベースに保存するASP複数行テキストボックスがあります。データを取得するときは、データをxmlにシリアル化し、XSL変換を実行してHTMLを出力します。

変換内で、要素のonclickイベントを介して、テキストボックスで定義されたデータをjavascript関数に渡します。

私が直面している問題...ユーザーがキャリッジリターンをテキストボックスに入力してデータベースに保存すると、ページの読み込み時にJavaScriptエラーが生成されます。

XslCompiledTransform変換には.NETを使用しています。XmlDocumentと呼ばれるプロパティがありPreserveWhiteSpaceます。デフォルトはfalseで、XMLの空白を取り除くように設定できます。これにより、ユーザーが改行テキストを入力できないという問題が解決されますが、クライアントは、入力したテキストのフォーマットを可能な限り保持したいと考えています。

私の知る限り、.NETXslCompiledTransformはキャリッジリターン-改行を。に変換し

ます。これらはjavascriptを壊している文字だと思います。

私の最初の考えは、文字列をjavascript関数に渡す前に、xsl内のキャリッジリターンを取り除くことでしたが、文字列を「検索」する文字を特定できませんでした。

別の質問は、ASP.NETテキストボックスコントロール内からのキャリッジリターンのためにSQLにどの文字が格納されるかということだと思います。

データベース内のデータを直接見ると、SQLは文字を「表示できない」文字または(2つの空のボックス)として表示しているように見えます。

誰かがこの種のことを経験したことがありますか?

4

2 に答える 2

0

コードビハインドでこれを実行して、目的の結果を得ることができました。

using (StringWriter sWriter = new StringWriter())
        {

            xTrans.Transform(xDoc, xslArgs, sWriter);

            return sWriter.ToString().Replace("
", "\\r\\n");
        }
于 2011-02-07T20:48:31.967 に答える
0

もうひとつ、ひっかかったのは…

最初は、「コンパイル済み」コードの変更を必要としない、この問題の解決策を見つけたかったのです。xsl 別名「短期修正」内でこれを行う方法。

私はこれを最初に試しましたが、成功しませんでした...

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

これは基本的に何もしませんでしたが、まだ JavaScript エラーが発生していました。

結局、これを試した...

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

2番目は実際に空白を取り除くのに機能したため、javascriptエラーは回避されました. これは、javascript エラーの問題を解決しただけなので、私の要件に対する完全な解決策ではありませんでしたが、ユーザーがページを「壊す」ことを効果的に防ぐことができました。

そのため、短期的な解決策としては十分です。

于 2011-02-07T22:26:02.833 に答える