Entity framework 使用KnockoutJS和Entity Framework 6删除操作

Entity framework 使用KnockoutJS和Entity Framework 6删除操作,entity-framework,knockout.js,Entity Framework,Knockout.js,我在使用KOjs和EF6执行删除操作时遇到问题。当我单击“删除”按钮时,会出现确认对话框,但选定的行不会被删除。 这是我的控制器: public JsonResult FetchActivities() { return Json(_account.FindAllActivities(), JsonRequestBehavior.AllowGet); } [System.Web.Mvc.HttpDelete] public void Delet

我在使用KOjs和EF6执行删除操作时遇到问题。当我单击“删除”按钮时,会出现确认对话框,但选定的行不会被删除。 这是我的控制器:

 public JsonResult FetchActivities()
    {
        return Json(_account.FindAllActivities(), JsonRequestBehavior.AllowGet);
    }

    [System.Web.Mvc.HttpDelete]
    public void DeleteActivity(int id)
    {
        try
        {
            if (id != 0)
            {
                _account.Delete(id);
            }
        }
        catch
        {
            throw new HttpResponseException(HttpStatusCode.BadRequest);
        }
    }
这是一种观点:

<table class="table table-striped table-bordered table-condensed">
<tr>
    <th>URL</th>
    <th>Thumbnail</th>
    <th>Title</th>
</tr>
<tbody data-bind="foreach: Activities">
    <tr>
        <td data-bind="text: urlactivite"></td>
        <td data-bind="text: thumbnail"></td>
        <td data-bind="text: title"></td>
        <td><button class="btn btn-mini btn-danger" data-bind="click: $parent.removeActivity">remove</button></td>
    </tr>
</tbody>
这是视图模型:

    var ProfilesViewModel = function () {
    var self = this;
    var url = "/WhiteList/FetchActivities";
    var refresh = function () {
        $.getJSON(url, {}, function (data) {
            self.Activities(data);
        });
    };

    // Public data properties
    self.Activities = ko.observableArray([]);
    self.removeActivity = function (profile) {
        if (confirm("Are you sure you want to delete this profile?")) {
            var id = profile.id;
            waitingDialog({});
            $.ajax({
                type: 'DELETE', url: '/WhiteList/DeleteActivity/' + id,
                success: function () { self.Activities.remove(profile); },
                error: function (err) {
                    var error = JSON.parse(err.responseText);
                    $("<div></div>").html(error.Message).dialog({ modal: true, title: "Error", buttons: { "Ok": function () { $(this).dialog("close"); } } }).show();
                },
                complete: function () { closeWaitingDialog(); }
            });
        }
    };
    refresh();
};
ko.applyBindings(new ProfilesViewModel());

我的代码中没有错误。有人能帮我吗?

您的代码有几个错误:

唯一可观察的属性是Activities observable数组:当您使用refresh加载数据时,您正在创建一个规则的、不可观察的对象的可观察数组。这意味着ypu试图在数组的常规、不可观察的属性和活动之间进行绑定。 您没有向removeActivity传递任何参数,您希望获得一个配置文件,这是什么,并获取它的id来删除它。 您需要对模型进行修改:

创建具有与活动相同属性但声明为可观察属性的活动构造函数 这两个选项之一 在活动构造函数中包含removeActivity,以获取要使用此或self删除的活动的id 在模型的根目录中包含removeActivity,并将id作为参数接收,然后在click绑定中传递活动的id 修改“刷新”,以便将收到的活动的每个元素映射到使用构造函数创建的新活动对象 如果选择选项2.2,则可以使用自动设置


请查看您的代码,并尝试了解您希望在removeACtivity函数中接收配置文件的原因。我想你们会明白这是毫无意义的。

对不起,现在我懂了一点,但这是我第一次体验ko和javascript。所以请你们引导我清除路径,让它更清晰。对不起,伙计,但我不会教你们ko。我已经告诉过您的代码有什么问题,以及解决问题的不同选项。但是,如果您不理解,那么您必须在官方页面上完成KO教程,并在web上查看一些其他示例。有很多。我不打算为您编写工作代码,那将是无用的。你宁愿学习技术,然后寻求帮助。