c#linq对象到javascript输出

时间:2012-07-14 10:26:25

标签: javascript asp.net-mvc signalr

在我的信号器应用程序中,我使用以下Hub方法发送通知: - C#代码: -

 public void Updatecid(int uid, string connid)
    {
        var ntf = ege.notifications.Where(u => u.UserID == uid).ToList();
        Clients[connid].addData(ntf);
    }

Javascript代码客户端: -

connection.addData = function (data) {
            for (var i = 0; i < data.length; i++) {
                var element = data[i];
                $('#notiadd').append("<li>" + element.NotificationTitle + "<a href='" + element.NotificationLink + "'>Click Here</a><input type='hidden' value='" + element.ID + "' /> <a href='#' class='delnoti'>X</a> </li>");
            }
        };

获得输出: -

safasfasfa点击这里X

undefined点击这里X

undefined点击这里X

undefined点击这里X

undefined点击这里X

undefined点击这里X

undefined点击这里X

undefined点击这里X

undefined点击这里X

undefined点击这里X

undefined点击这里X

您可以检查输出,只有第一个通知即将到来并且保留未定义。 我在C#代码中调试应用程序发送完整的数据,但是javascript会产生一些输出错误。

2 个答案:

答案 0 :(得分:0)

将您的代码更改为以下内容......

connection.addData = function (data) {
  // console.log("data", JSON.stringify(data)) // Print the output to the console
  var html = $.map(data, function (i, element) {
    return "<li>" + element.NotificationTitle + "<a href='" + element.NotificationLink + "'>Click Here</a><input type='hidden' value='" + element.ID + "' /> <a href='#' class='delnoti'>X</a> </li>";
  }).join("");

  $("#notiadd").append(html);

};

在此解决方案中,您可以预先创建所有html并向DOM添加一次。这要快得多。

希望这能解决您遇到的问题。

答案 1 :(得分:0)

只需更改C#代码: -

var ntf = ege.notifications.Where(u => u.UserID == uid).ToList();
        var collection = ntf.Select(x => new
        {
            ntitle = x.NotificationTitle,
            nlink = x.NotificationLink,
            nid = x.ID
        });
        Clients[connid].addData(collection);