在web api中按ID删除产品

时间:2014-01-15 06:04:24

标签: c# asp.net-web-api

我正在开发一个WebAPI。

我想通过ID删除产品。 但是,使用我的代码,它删除了所有记录。 当我键入id号时,它删除了整个记录,而不是删除id本身。 我可以知道我的代码有什么问题吗? 如何改进它以通过id删除它。

productcontroller.cs

  function ProductViewModel(product) {
                var self = this;

                self.Id = product.Id;
                self.Name = product.Name;
                self.Price = product.Price;
                self.Category = product.Category;
            }

            self.products = ko.observableArray();   // Contains the list of products
            self.product = ko.observable();

            self.status = ko.observable();


public void DeleteProduct(int id)
{
     Product item = repository.Get(id);
     if (item == null)
     {
          throw new HttpResponseException(HttpStatusCode.NotFound);
     }
     repository.Remove(id);    
}

.cshtml

 // Get delete product


 self.remove = function () {

    self.products.remove();
    $.getJSON("/api/products", function (products) {
        $.each(products, function (index, product) {
            self.products.pop(new ProductViewModel(product));
        })
    });
}

productrespository.cs

public void Remove(int id)
        {
            products.RemoveAll(p => p.Id == id);
        }

1 个答案:

答案 0 :(得分:0)

根据问题中的评论,我认为你应该有类似的东西。

function ProductsViewModel(){
    var self = this;
    this.products = ko.observableArray();
    this.delete = function (product) {
        // remove from the db
        $.when($.ajax({ url: '/api/products/' + product.id, type: 'DELETE'}))
         .done(function(){
            // and then from the ui
            self.products.remove(product);
        }).fail(function(){
            // couldn't remove from the db
            alert('failed to remove product');
        });
    };
}


<!-- ko foreach: products -->
  <button data-bind="event: { click: $parent.delete }" />
<!-- /ko -->