knockout.js getJSON不调用webAPI方法

sgtfey8w  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(135)

我是mvc4和webAPI的新手,我正在用它开发我的第一个应用程序。它是单页应用程序,使用Knockoutjs。我使用这个演练https://github.com/geersch/KnockoutSpa/
我webAPI方法一切都很好,当我用Fiddler调用方法时,它返回正确的值。2但是当我从getJson()方法使用它时,它从来没有调用过。3下面是我的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);
}

Web API控制器

// GET api/NQSale
    public IEnumerable<NQSaleDto> GetNQSales()
    {
        //return db.NQSales.AsEnumerable();
        return db.NQSales
            .AsEnumerable()
            .Select(nqlist => new NQSaleDto(nqlist));

    }
gtlvzcf8

gtlvzcf81#

您的URL结构
@Url.RouteUrl(“默认应用程序”,新的{httpproute =“",控制器=“NQSale”})
应生成URL "/api/NQSale“,这意味着您的控制器应为:

//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相关。

yzxexxkh

yzxexxkh2#

我猜你的网址没有正确生成。如果Javascript当前在视图中还是在一个单独的文件中?@网址只有在视图中才能工作。

相关问题