Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在gridview页面上的DataItemTemplateContent中执行javascript_Javascript_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Devexpress - Fatal编程技术网

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

如何在gridview页面上的DataItemTemplateContent中执行javascript,javascript,asp.net,asp.net-mvc,asp.net-mvc-4,devexpress,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

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

column.SetDataItemTemplateContent( c =>
  {
    ViewContext.Writer.Write(
      Html.Partial( "PartialView" )
    );
} );
局部视图
PartialView
看起来像:

<p>text</p>

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

log(“来自PartialView的你好”);
因此,在重新加载页面之后,我得到了
console.log
输出x次,其中x是我的GridView中显示的行数。但是如果我转到GridView中的下一页,js将不再执行,我也不会得到更多的
console.log
输出。局部视图渲染正确,因为每行仍显示“文本”

您知道如何在使用gridview分页时再次获得输出吗


(顺便说一句,我的目标是通过javascript呈现一个化学结构。该示例被简化以显示一般问题。)

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

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

警报(“来自PartialView的你好”);

我不完全确定您想做什么,但不是在返回中嵌入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"));
    }
}
文本

您的方法将类似于:

<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"));
    }
}
函数方法(s,e){
var objs=document.getElementsByClassName('actonme');
var count=objs.length;
对于(变量iIndex=0;iIndex
我认为第二个“页面”不会执行此JavaScript,因为它不是“完整页面加载”。我不明白你的目标。但是,如果您试图在视图“呈现”后运行一些js,我建议您执行js函数作为部分文章的回调。通过这种方式,您可以在客户端完成部分帖子后立即遍历对象。我的目标是通过javascript在每一行中呈现化学结构。这个例子被简化以显示一般问题。有趣。我猜您有一个“下一页”或“2”链接,单击该链接可以表示您打算执行下一页查询。此功能是否内置于控件中?或者,您正在执行一些自定义js来执行HTTP POST以获取部分视图?我认为问题在于,当这篇文章发生时,你没有得到一个“完整的HTML页面”,因此返回的任何js都不会得到“评估”。所以你需要解决这个“问题”。我相信解决方法是使用“回调”或函数引用。如果您可以访问产品文档,您可以检查此产品的部分post库是否允许您在其中放置自己的挂钩。我使用GridViewExtension中的内置寻呼机。此处涉及的唯一控制器操作是回调操作,gridview在每次往返过程中使用回调操作(例如分页、列更改、过滤器更新等)。因此,我的网格实现看起来非常像这里(除了SetDataItemTemplateContent部分):这段代码中可能有很多语法错误,我是在头脑中输入的,但是这个想法应该足够使用了。也可以只传递方法名而不是javascript作为ClientSideEvents.EndCallback的值。但是我想清楚地说明作为对象传递的变量(s,对对象的引用,e,事件参数)