繁体   English   中英

淘汰ajax.beginform回调

[英]knockout ajax.beginform callback

我在表中使用可观察到的可观察数组,每行都有包裹在MVC Razor Ajax.BeginForm中的删除按钮。

Delete按钮调用一个javascript函数,该函数执行ko.utils.postJson将ID发送到服务器,以便在服务器上删除记录,然后从viewModel中删除,从而更新UI。

我该如何做,以便我在等待客户端删除之前等待postJson? 如果我使用Ajax.BeginForm的OnSuccess和OnFailure选项-如何获取要从数组中删除的相关$ data?

remove函数传入了一个引用,但是如果我先在服务器端进行操作,如何将这个引用传递给OnSuccess回调?

我知道我自己可能可以在remove函数中编写一个.ajax调用的代码,但是如果可以的话,我更喜欢使用Ajax.BeginForm。

谢谢菲尔

将删除功能连接到项目的父项。

例如你可以做这样的事情

使用Javascript

var itemObject = function(data){
    var self = this;

    this.Id = ko.observable(data.Id);
    .... etc ....
};

var baseViewModel = function(){
    var self = this;

    this.Items = ko.observableArray();

    this.Setup = function(items){
        //using underscore.js to map the items
        self.Items(_.map(items, function(item){
            return new itemObject(item);
        }));
    };

    this.deleteItem = function(item){
        $.ajax({
            url: "/api/v1/Item/" + item.Id(),
            type: "DELETE",
            success: function (data) {
                //Client side remove here
            },
            error: function (data) {
                //Whoops error time
            },
            complete: function (data) {
                //Turn of spinners or whatever here
            }
        });
    };
};

$(function(){
  var myApp = new baseViewModel();
  myApp.Setup(items);
  ko.applyBindings(myApp);
});

HTML

<div data-bind="foreach: Items">
    <div data-bind="text: Id"></div>
    <button data-bind="click: $parent.deleteItem">Delete</button>
</div>

Djbielejeski提出了一个很好的方法,但是如果您仍然想使用Ajax.BeginForm进行删除,则也可以将参数传递给OnSuccess方法。

您只需要将ID传递给OnSuccess方法即可。 像这样:

@using(Ajax.BeginForm("action", "controller", new AjaxOptions { OnSuccess = string.Format("OnSuccess({0})", rowId) }) { ... your html ... })

上面的代码假定rowId如果是guid,则为整数;否则,您必须将其括在引号中。

比在OnSuccess函数中,您将获得ID,该ID将允许您从可观察数组中删除元素

function OnSuccess(id){
  // id is available here... and you can get your viewmodel with ko.dataFor function
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM