4

カスタム DataItemTemplate を持つ列を含む DevExpress GridView を持っています

column.SetDataItemTemplateContent( c =>
  {
    ViewContext.Writer.Write(
      Html.Partial( "PartialView" )
    );
} );

部分ビューは次のPartialViewようになります。

<p>text</p>

<script>
  console.log("hello from PartialView");
</script>

したがって、ページのリロード後、console.logx 回の出力が得られます。ここで、x は GridView に表示される行の数です。console.logしかし、GridView の次のページに移動すると、js が実行されなくなり、出力が得られなくなります。すべての行に表示される「テキスト」がまだあるため、部分ビューは正しくレンダリングされます。

グリッドビューのページネーションの使用中に出力を再度取得する方法はありますか?

(ところで、私の目標は、javascript を介して化学構造をレンダリングすることです。この例は、一般的な問題を示すために単純化されています。)

4

2 に答える 2

0

あなたが何をしようとしているのか完全にはわかりませんが、戻り値に javascript を埋め込む代わりに、接続できるクライアント側のスクリプトがあります。DOM 要素に一意のクラスを与えてから、ClientSideEvents.EndCallBack を設定します。

settings.ClientSideEvents.EndCallback = 
  "function (s,e) { if (e.command != 'FUNCTION') { YourCustomMethod(s, e) }; }";

単純な jquery またはストレートな JavaScript を使用すると、クラス名に一致する DOM オブジェクトのリストをセレクターとして取得でき、処理に必要な追加データをデータ プロパティに含めることができます。

あなたの例では、部分的なビューは次のようになります。

<p class="actonme" data-msg="hello from PartialView">text</p>

メソッドは次のようになります。

function YourCustomMethod(s, e) {
    var objs = document.getElementsByClassName('actonme');
    var count = objs.length;
    for (var iIndex = 0; iIndex < count; iIndex++) {
        console.log(objs[iIndex].getAttribute("data-msg"));
    }
}
于 2014-03-10T18:50:58.467 に答える
0

次のように、「dxss_」で始まるスクリプト タグ ID に追加してみてください。

<script id="dxss_myscript" type="text/javascript">
  alert('hello from PartialView');
</script>
于 2013-03-13T15:09:04.660 に答える