我正在学习SignalR im database-change-notifications-asp-net-signalr 当我返回列表时,我的所有列值都未定义
下面是我目前构建的视图
<script type="text/javascript">
$(function () {
// Proxy created on the fly
var job = $.connection.myHub;
// Declare a function on the job hub so the server can invoke it
job.client.displayStatus = function () {
getData();
};
// Start the connection
$.connection.hub.start().done(function () {
getData();
});
});
function getData() {
var $tbl = $('#tblJobInfo');
$.ajax({
url: '@Url.Action("Get", "Home")',
type: 'GET',
datatype: 'json',
success: function (data) {
console.log(data);
if (data.length > 0) {
$tbl.empty();
$tbl.append(' <tr><th>ID</th><th>Name</th><th>lname</th><th>phone</th></tr>');
var rows = [];
for (var i = 0; i < data.length; i++) {
rows.push(' <tr><td>' + data[i].id + '</td><td>' + data[i].fname + '</td><td>' + data[i].lname + '</td><td>' + data[i].phone + '</td></tr>');
}
$tbl.append(rows.join(''));
}
}
});
}
</script>
<div>
<table id="tblJobInfo" style="text-align:center;margin-left:10px"></table>
</div>
当我的页面加载时,调用此方法
public List<JobInfo> Get()
{
var det = objRepo.GetData();
return det;
}
我在return det上放了一个断点;我可以在列表中看到相关的值,如前所述,在构建表时,列值是“未定义”
这是JobInfo类
public class JobInfo
{
public int id { get; set; }
public string fname { get; set; }
public string lname { get; set; }
public string phone { get; set; }
}
任何帮助/指示都将不胜感激。
非常感谢
更新
以下是在执行console.log(数据)时在浏览器中编写的内容;
System.Collections.Generic.List`1[KnockOutjsTutorial.Models.JobInfo]
答案 0 :(得分:1)
你需要这样做:
$.connection.hub.start().done(function () {
getData();
});
http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client
由于start()
是异步的,因此在getData()
完成之前,当前代码中对start()
的调用正在执行。通过将代码放在done
中,您可以确信SignalR已在此时创建了连接。
编辑:
我认为问题是控制器方法。它看起来像这样吗?
public ActionResult Get()
{
var data = Get(); // Which returns List<JonInfo>.
return Json(data);
}
您需要将该作业列表作为JSON返回。
编辑:
根据我们在聊天室中的对话,问题是由致电:
引起的 Clients.All.displayStatus()
并打开多个标签页。所以将代码更改为
Clients.Caller.displayStatus()
应该这样做。