Удалить Не работает в MVC 2 - PullRequest
0 голосов
/ 12 ноября 2010

// GET: / Product / Delete / 5

    public ActionResult Delete(int id)
    {
        var res = (from r in data.Products where r.ProductID == id select r).FirstOrDefault();
        //return View(data.Products.FirstOrDefault(p => p.ProductID == id));
        return View(res);
    }

    //
    // POST: /Product/Delete/5
   // [HttpPost]
   [AcceptVerbs(HttpVerbs.Post)]
    **public ActionResult Delete(Product producttodelete)**
    {

        try
        {
            // TODO: Add delete logic here
            var res = (from r in data.Products where r.ProductID == producttodelete.ProductID select r).FirstOrDefault();
           // var productto = data.Products.Single(p => p.ProductID == producttodelete.ProductID);
            data.Products.DeleteObject(res);
            data.SaveChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }
}

Здесь, в строке "producttodelete", я не получаю никаких значений, она принимает значение null. Вместо создания, детали, редактирование работают нормально.... только удалить не работает ....... Я много пробовал

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

Если вы используете строго типизированные представления, попытались ли вы:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(int id, Product productToDelete)
{
    try
    {
        var res = (from r in data.Products where r.ProductID == id select r).FirstOrDefault();
        data.Products.DeleteObject(res);
        data.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

... или если вы не используете строго типизированные представления:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(int id, FormCollection collection)
{
    try
    {
        var res = (from r in data.Products where r.ProductID == id select r).FirstOrDefault();
        data.Products.DeleteObject(res);
        data.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

В любом случае,вам нужно предоставить параметр id, который вы затем сможете использовать для получения вашего объекта из хранилища данных.Маршрутное сопоставление по умолчанию в MVC2 (в Global.asax.cs) берет идентификатор из URL-адреса записи и сопоставляет его с этим параметром.

0 голосов
/ 12 ноября 2010

почему бы просто не получить идентификатор, как в остальных, вместо того, чтобы пытаться получить всю модель?похоже, вы просто выбираете, используя идентификатор в любом случае.попробуйте это:

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Delete(int id)
        {

            try
            {
                // TODO: Add delete logic here
                var res = (from r in data.Products where r.ProductID == id select r).FirstOrDefault();
               // var productto = data.Products.Single(p => p.ProductID == producttodelete.ProductID);
                data.Products.DeleteObject(res);
                data.SaveChanges();
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...