8

剣道グリッドの列に ASP.NET MVC ClientTemplate を定義する際に問題が発生しました。これは、「+」記号が取り除かれているためです。これにより、クライアント側で生成されたテンプレートが不適切な構文のために失敗します。

私の ClientTemplate は次のとおりです。

c.Template(@<text></text>).ClientTemplate("#='Hello' + Name#")

ただし、クライアントでは、これは次のように削減されます。

template: "#='Hello'   Name#"

つまり、プラス記号はスペースとしてレンダリングされています (URL エンコーディングに似ていると思います)。JS から直接使用すると、テンプレートは完全に機能します (このJSBinを参照)。

+ 記号をエスケープして ClientTemplate で使用できるようにする方法を知っている人はいますか?

\\+' ' (' ' としてレンダリングされる\)、' \+' (無効な C#)、&#43;( と同じですが、' '+などの他のものは正常に動作します)を使用してエスケープを試みました&#44;

何か案は?ありがとう。

参考までに、私は Razor マークアップと 2012 年第 2 四半期の Kendo リリースを使用しています (Telerik からアップグレードしているため、jQuery バージョンによって制限されているため、Q3 はまだ使用できません)。

注:なぜ私がこれを行っているのかを誰かが尋ねる前に、私の ClientTemplate は実際にはもっと複雑ですが、これは問題を説明するための単純化された例です :-)

4

6 に答える 6

11

ソース コード1を確認しました。MVC ラッパーはHttpUtility.UrlDecode、JS にレンダリングする前にすべてのテンプレートを呼び出しています。したがって、+ 記号 (またはその他の予約済み URL 文字) をエスケープするには、パーセント エンコーディングを使用します。この場合%2B

c.Template(@<text></text>).ClientTemplate("#='Hello' %2B Name#")

1 v2013.3、src\Kendo.Mvc\Kendo.Mvc\UI\Grid\Columns\GridColumnBase.cs、135行目。これはバグであると思われ、HttpUtility.UrlEncode.

于 2014-06-23T16:36:09.310 に答える
7

解決策を見つけました (おそらく、より多くの回避策)。インライン JavaScript を記述する代わりに、コードを別の JS 関数に移動し、それをテンプレート コードから呼び出しました。

#=myFunctionToDoComplicatedStuff(Name)#

正直なところ、テスト容易性、再利用、および一般的なグッド プラクティスの理由から、これはおそらく採用す​​べきアプローチです。些細なことでちょっと面倒くさい!

于 2013-01-22T09:36:12.160 に答える
1

プラス記号によるエンコーディングの問題を回避する ClientTemplate で連結を行うための簡単なソリューションが必要な場合は、次のように JavaScript の concat 関数を使用できます。

c.Template(@<text></text>).ClientTemplate("#='Hello'.concat(Name)#")
于 2013-07-19T17:12:40.200 に答える
0

以下のように、算術演算を引用符の外側に置いてみましたか。

c.Template(@<text></text>).ClientTemplate("#='Hello'" + "Name#")

于 2013-01-17T17:03:43.107 に答える
0

別のプラス記号を使用して解決策を見つけました。

c.Template(@<text></text>).ClientTemplate("#='Hello' (<span style=\\'font-size: 0.6em\\'>&#10133;</span>{ Name#")

これにより...

template: "#='Hello + Name#"
于 2013-05-17T12:58:02.663 に答える
0

価値があるのは、これに遭遇し、負の値を差し引いて解決したことです。そのような:

kendo.parseFloat(Amount)  - -kendo.parseFloat(Tip)
于 2013-03-14T23:25:16.960 に答える