在我的信号器应用程序中,我使用以下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会产生一些输出错误。
答案 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);