如何在gridview分页上的DataItemTemplateContent中执行javascript

时间:2012-12-19 12:40:27

标签: javascript asp.net asp.net-mvc asp.net-mvc-4 devexpress

我有一个DevExpress GridView,其中包含一个带有自定义DataItemTemplate的列

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

部分视图PartialView看起来像:

<p>text</p>

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

因此,在页面重新加载后,我得到console.log输出x次,其中x是我的GridView中显示的行数。但是,如果我转到GridView的下一页,js就不再执行了,我不再获得console.log个输出。部分视图正确呈现,因为每行仍然显示“文本”。

如何在使用gridview分页期间再次获取输出?

(顺便说一下。我的目标是通过javascript渲染化学结构。简化示例以显示一般问题。)

2 个答案:

答案 0 :(得分:0)

尝试添加以“dxss_”开头的脚本标记ID,如下所示:

<script id="dxss_myscript" type="text/javascript">
  alert('hello from PartialView');
</script>

答案 1 :(得分: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"));
    }
}