如何在gridview页面上的DataItemTemplateContent中执行javascript
我有一个DevExpress GridView,其中包含一个带有自定义DataItemTemplate的列如何在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
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,事件参数)