C# 以Json MVC+;的形式返回对象的异步列表;击倒
以下代码是常规控制器(不使用API)的一部分,我需要向knockout.js文件返回多个值。问题是,文件正在等待接收Json,当我发送列表时,我收到一条消息说“SyntaxError:位置0处Json中的意外令牌S”,但如果我更改签名并将对象转换为Json,则linq for async不会运行C# 以Json MVC+;的形式返回对象的异步列表;击倒,c#,json,asynchronous,knockout.js,C#,Json,Asynchronous,Knockout.js,以下代码是常规控制器(不使用API)的一部分,我需要向knockout.js文件返回多个值。问题是,文件正在等待接收Json,当我发送列表时,我收到一条消息说“SyntaxError:位置0处Json中的意外令牌S”,但如果我更改签名并将对象转换为Json,则linq for async不会运行 <!-- ko if:detail() --> <div class="col-md-4"> <div class
<!-- ko if:detail() -->
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Detail</h2>
</div>
<table class="table">
<tr><td>AreaEquipment</td><td data-bind="text: detail().AreaEquipment"></td></tr>
<tr><td>InspectionID</td><td data-bind="text: detail().InspectionID"></td></tr>
</table>
</div>
</div>
<!-- /ko -->
我的问题是,如何使用async获取列表(这样它就可以在knockout中工作),并且仍然以JSON的形式发送列表?或者我应该走哪条路?
public async Task<List<InsDetDTO>> LoadInsDet(int id)
{
var ins = await db.INSPECTIONDETAILS
.Select(t =>
new InsDetDTO()
{
Id = t.ID,
AreaEquipment = t.AreaEquipment,
InspectionID = t.InspectionID
}).Where(t => t.InspectionID == id).ToListAsync();
return ins;
}
<!-- ko if:detail() -->
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Detail</h2>
</div>
<table class="table">
<tr><td>AreaEquipment</td><td data-bind="text: detail().AreaEquipment"></td></tr>
<tr><td>InspectionID</td><td data-bind="text: detail().InspectionID"></td></tr>
</table>
</div>
</div>
<!-- /ko -->
查看
检查
<!-- ko if:detail() -->
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Detail</h2>
</div>
<table class="table">
<tr><td>AreaEquipment</td><td data-bind="text: detail().AreaEquipment"></td></tr>
<tr><td>InspectionID</td><td data-bind="text: detail().InspectionID"></td></tr>
</table>
</div>
</div>
<!-- /ko -->
<!-- ko if:detail() -->
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Detail</h2>
</div>
<table class="table">
<tr><td>AreaEquipment</td><td data-bind="text: detail().AreaEquipment"></td></tr>
<tr><td>InspectionID</td><td data-bind="text: detail().InspectionID"></td></tr>
</table>
</div>
</div>
<!-- /ko -->
细节
区域设备
检查ID
在玩了一点之后,我发现了我的问题,在控制器中,如果我先将结果更改为列表,然后当我转换为JSON时,更容易在视图中捕捉到它们,这些是我的更改,希望这会对某人有所帮助
<!-- ko if:detail() -->
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Detail</h2>
</div>
<table class="table">
<tr><td>AreaEquipment</td><td data-bind="text: detail().AreaEquipment"></td></tr>
<tr><td>InspectionID</td><td data-bind="text: detail().InspectionID"></td></tr>
</table>
</div>
</div>
<!-- /ko -->
查看请注意,单击:$parent.getInspectionDetails会在KO代码中填充详细信息,这样我就可以使用foreach来处理所有详细信息
<!-- ko if:detail() -->
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Detail</h2>
</div>
<table class="table">
<tr><td>AreaEquipment</td><td data-bind="text: detail().AreaEquipment"></td></tr>
<tr><td>InspectionID</td><td data-bind="text: detail().InspectionID"></td></tr>
</table>
</div>
</div>
<!-- /ko -->
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Inspections</h2>
</div>
<div class="panel-body">
<ul class="list-unstyled" data-bind="foreach: inspections">
<li>
<strong><span data-bind="text: Id"></span></strong>
<span data-bind="text: date"></span>
<strong><span data-bind="text: labDesc"></span></strong>
<span data-bind="text: username"></span>
<small><a href="#" data-bind="click: $parent.getInspectionDetails">Details</a></small>
</li>
</ul>
</div>
</div>
<div class="alert alert-danger" data-bind="visible: error"><p data-bind="text: error"></p></div>
</div>
<!-- ko if:detail() -->
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Detail</h2>
</div>
<table class="table">
<tr class="list-unstyled" data-bind="foreach: detail">
<td>AreaEquipment</td><td data-bind="text: AreaEquip"></td>
<td>InspectionID</td><td data-bind="text: Inspectionid"></td>
</tr>
</table>
</div>
</div>
我要做的是将action方法的url放在浏览器的地址栏中,最好是chrome,因为它将显示json而不强制您保存它,并查看它返回什么。然后分析返回。我得到[{“Id”:2,“InspectionID”:12,“AreaEquipment”:"F“}]没关系,问题是它不是异步的,它是异步的。KO期望的是什么:数组?因为那是数组。我添加了app.js(KO)视图控制器方法的返回类型是什么?它返回的是JsonResult吗?看起来你得到的数据是JS而不是JSON。