我是mvc 4和webAPI的新手,我正在开发我的第一个应用程序。它是单页面应用程序并使用Knockoutjs.I使用此演练http://cgeers.com/2012/10/06/single-page-application-with-knockout-js-part-1/
我用webAPI方法做的每件事都很好,当我用Fiddler调用方法时它返回正确的值。但是当我从getJson()方法使用它时它从未调用过。这是我的HTML:
<table id="nqsales" class="table table-striped table-hover table-condensed">
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
</thead>
<tbody data-bind="foreach: viewModel.nqsales">
<tr>
<td data-bind="text: a"></td>
<td data-bind="text: b"></td>
<td data-bind="text: c"></td>
</tr>
</tbody>
</table>
的Javascript
$(function () {
ko.applyBindings(viewModel);
viewModel.loadNqsales();
});
var viewModel = {
nqsales: ko.observableArray([]),
loadNqsales: function () {
var self = this;
$.getJSON(
'@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "NQSale" })',
function (nqsales) {
self.nqsales.removeAll();
$.each(nqsales, function (index, item) {
self.nqsales.push(new nqsale(item));
});
}
);
}
};
function nqsale(nqsale) {
this.expenceFormNo = ko.observable(nqsale.a);
this.orderNo = ko.observable(nqsale.b);
this.date = ko.observable(nqsale.c);
}
WebAPIController
// GET api/NQSale
public IEnumerable<NQSaleDto> GetNQSales()
{
//return db.NQSales.AsEnumerable();
return db.NQSales
.AsEnumerable()
.Select(nqlist => new NQSaleDto(nqlist));
}
答案 0 :(得分:0)
我猜你的Url没有正确生成。如果View中的Javascript当前还是单独的文件? @Url仅在视图中有效。
答案 1 :(得分:0)
您的网址构建
@ Url.RouteUrl(“DefaultApi”,new {httproute =“”,controller = “NQSale”})
应该生成一个'/ api / NQSale'的URL,这意味着您的控制器应该是以下内容:
//The controller name relates to the route
public class NQSaleController : ApiController
{
// The action name relates to the HttpVerb
public IEnumerable<NQSaleDto> Get()
{
//return db.NQSales.AsEnumerable();
return db.NQSales
.AsEnumerable()
.Select(nqlist => new NQSaleDto(nqlist));
}
}
默认情况下,API的路由是控制器的名称(NQSaleController)与路径相关,Action(Get)的名称与HttpVerb相关。