首页 > 解决方案 > 在 asp.net 数据视图中定位行

问题描述

我有一个带有从 sql 数据库加载记录的数据视图的 asp.net 页面。它工作正常。没问题。我想在收到带有要突出显示的记录 ID 的服务器端事件时自动突出显示特定记录。

如果我手动将变量设置为记录 ID(参见示例),我尝试过的代码可以工作。问题是当我尝试使用该行来定位从 SSE 收到的 ID 时,它不起作用。我希望这可能是我的代码中搜索行中文本的语法错误。

/*  ********************************************************************
    EXAMPLE 1. THIS WORKS
    ********************************************************************    */
if (typeof (EventSource) !== "undefined") {
    var source = new EventSource("/dataPush/dataOrderPush.php");
    var findThisLine = "row_112.00";
    
    $('#ListView1_cmrUL li:contains("' + findThisLine + '")').scrollintoview();
    $('#ListView1_cmrUL li').removeClass('active');
    $('#ListView1_cmrUL li:contains("' + findThisLine + '")').addClass('active');
                                            
                                        
/*  ********************************************************************
    EXAMPLE 2. This does NOT WORK
    Manually setting variable to data returned from server side event.
    This does NOT WORK even though the event.data is the same text as 
    set manually in example 1.
    ********************************************************************    */  
if (typeof (EventSource) !== "undefined") {
    var source = new EventSource("/dataPush/dataOrderPush.php");
    var findThisLine = event.data;
    
    $('#ListView1_cmrUL li:contains("' + findThisLine + '")').scrollintoview();
    $('#ListView1_cmrUL li').removeClass('active');
    $('#ListView1_cmrUL li:contains("' + findThisLine + '")').addClass('active');
    
    
/*  ********************************************************************
    EXAMPLE 3. This does NOT WORK
    This attempts to use the data returned from the SSE directly
    ********************************************************************    */                      
if (typeof (EventSource) !== "undefined") {
    var source = new EventSource("/dataPush/dataOrderPush.php");
    
    $('#ListView1_cmrUL li:contains("' + event.data + '")').scrollintoview();
    $('#ListView1_cmrUL li').removeClass('active');
    $('#ListView1_cmrUL li:contains("' + event.data + '")').addClass('active');
    

这是有关该事件的更多信息。它是一个回显文本文件内容的服务器端事件。我会展示两者。

这是服务器端事件 php。它回显文本文件的内容。

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$metaOrderInfo = file_get_contents("playOrder.txt");
echo "data: $metaOrderInfo \n\n";
?>

现在(测试),文本文件的内容是这样的:

row_112.00

客户端上的这一行从服务器读取流事件。客户端中的代码只是:

var source = new EventSource("/dataPush/dataOrderPush.php");

这就是服务器端事件的工作方式。我已经验证返回的值是文本文件中的值。

我将返回的事件数据发送到控制台:

console.log(event.data);

这显示在控制台中。可以看到每隔几秒自动接收一次数据。那就是服务器端事件php。在运行时,文件中的实际文本有时会发生变化。在这里,它没有改变,用于测试。

10:13:17.306 row_112.00 
10:13:22.349 row_112.00 
10:13:27.385 row_112.00 
10:13:32.418 row_112.00 
10:13:37.452 row_112.00 
10:13:42.492 row_112.00 

换句话说,客户端自动获取更新的值,这部分工作。返回的 event.data 与服务器文本文件中的数据匹配。如果我为它插入一个控制台日志条目,我可以看到它是正确的。

所以问题仍然是,为什么该变量不适用于客户端的数据。

再次感谢您花时间帮助我解决这个问题。我希望这可以说清楚。

标签: javascriptasp.net

解决方案


推荐阅读