在使用 SignalR 的 Asp.Net 项目 MVC 中,我尝试迭代 Javascript 客户端中的 Service 返回的对象。对于以下代码中的 foreach 语句,我收到以下编译错误
foreach 语句无法对“System.Threading.Tasks.Task>”类型的变量进行操作,因为“System.Threading.Tasks.Task>”不包含“GetEnumerator”的公共(public)定义
有人可以建议在 View /服务调用中应该进行哪些更改吗?
查看代码
@model System.Threading.Tasks.Task<List<JobCurrentStatusDetails>>
<script type="text/javascript">
var connection = $.hubConnection();
var hub = connection.createHubProxy("JobDetailsHub");
hub.on('updateData',function(jSonRefreshData){
console.log(jSonRefreshData);
});
hub.invoke('NotifyUpdates').done(function(jSonRefreshData){
@Model = jSonRefreshData
@{int countTiles = 0;}
@foreach(item in Model)
{
if(item.color == "red")
{}
if(item.color == "green")
{}
}
});
</script>
添加服务器端代码
public async Task<List<JobCurrentStatusDetails>> NotifyUpdates()
{
var hubContext = lobalHost.ConnectionManager.GetHubContext<JobDetailsHub> ();
if (hubContext != null)
{
db = DataAccess.DataAccessModels.GetDashboardCounts();
return await hubContext.Clients.All.updateData(db);
}
else return null;
}
Controller 代码如下:
public ActionResult Index()
{
DataAccess da = new DataAccess();
var jobDetailService = new JobDetailsService(da);
return View(jobDetailService.NotifyUpdates());
}
最佳答案
您正在返回一个任务作为模型。您可以这样做:
public List<JobCurrentStatusDetails> NotifyUpdates()
{
var hubContext = lobalHost.ConnectionManager.GetHubContext<JobDetailsHub>();
if (hubContext != null)
{
db = DataAccess.DataAccessModels.GetDashboardCounts();
return hubContext.Clients.All.updateData(db).Result;
}
else return null;
}
关于javascript - 循环 'System.Threading.Tasks.Task<System.Collections.Generic.List' i 类型的对象时 foreach 语句中出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34910166/