Метод удаления не работает в MVC 3 - PullRequest
0 голосов
/ 29 марта 2012

Мой метод удаления не работает, вот что происходит в данный момент. Используя EF, я создал CRUD для взаимодействия с существующей БД. Прямо сейчас у меня есть метод Edit, работающий нормально, а также список индексов, но метод Delete все еще доставляет мне проблемы. Когда я перехожу к кнопке удаления для определенной записи, она вызывает представление удаления для этой записи и спрашивает, уверен ли я, что хочу удалить запись. Затем я нажимаю «Отправить», и данные исчезают из представления, но не перенаправляют меня на страницу индекса, как это должно быть. Когда я возвращаюсь к списку, он возвращает меня к представлению индекса, но запись все еще находится в таблице. Мне кажется странным, что данные исчезают из поля зрения, а не из БД.

Из того, что я могу сказать из других примеров, я видел, что мой код выглядит правильно, но это не может быть, потому что он не работает! Я не уверен, откуда может появиться эта ошибка, поэтому ниже я разместил свой код для моего контроллера, класса Delete и класса индекса.

PACONTROLLLER

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DBFirstMVC.Models;
using System.Data;

namespace DBFirstMVC.Controllers
{
    public class PaController : Controller
    {
        PaEntities db = new PaEntities();
        //
        // GET: /Pa/

        public ActionResult Index()
        {
            using (var db = new PaEntities())
            {
                return View(db.iamp_mapping.ToList());
            }
        }

        //
        // GET: /Pa/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /Pa/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Pa/Create

        [HttpPost]
        public ActionResult Create(iamp_mapping IAMP)
        {
            try
            {
                using (var db = new PaEntities())
                {
                    db.iamp_mapping.Add(IAMP);
                    db.SaveChanges();
                }

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Pa/Edit/5

        public ActionResult Edit(string id)
        {

            using (var db = new PaEntities())

            {

                return View(db.iamp_mapping.Find(id));
            }
        }

        //
        // POST: /Pa/Edit/5

        [HttpPost]
        public ActionResult Edit(string id, iamp_mapping IAMP)
        {
            try
            {
                using (var db = new PaEntities())
                {
                    db.Entry(IAMP).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Pa");
                }
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Pa/Delete/5

        public ActionResult Delete(string id)
        {
            using (var db = new PaEntities())
            {

                return View(db.iamp_mapping.Find(id));
            }
        }

        //
        // POST: /Pa/Delete/5

        [HttpPost]
        public ActionResult Delete(string id, iamp_mapping IAMP)
        {
            try
            {
                using (var db = new PaEntities())
                {
                    db.Entry(IAMP).State = EntityState.Deleted;
                    db.SaveChanges();
                    return RedirectToAction("Pa");
                }

            }
            catch
            {
                return View();
            }
        }
    }
}

УДАЛИТЬ КЛАСС

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DBFirstMVC.Models;
using System.Data;

namespace DBFirstMVC.Controllers
{
    public class PaController : Controller
    {
        PaEntities db = new PaEntities();
        //
        // GET: /Pa/

        public ActionResult Index()
        {
            using (var db = new PaEntities())
            {
                return View(db.iamp_mapping.ToList());

        }
    }

    //
    // GET: /Pa/Details/5

    public ActionResult Details(int id)
    {
        return View();
    }

    //
    // GET: /Pa/Create

    public ActionResult Create()
    {
        return View();
    } 

    //
    // POST: /Pa/Create

    [HttpPost]
    public ActionResult Create(iamp_mapping IAMP)
    {
        try
        {
            using (var db = new PaEntities())
            {
                db.iamp_mapping.Add(IAMP);
                db.SaveChanges();
            }

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

    //
    // GET: /Pa/Edit/5

    public ActionResult Edit(string id)
    {

        using (var db = new PaEntities())

        {

            return View(db.iamp_mapping.Find(id));
        }
    }

    //
    // POST: /Pa/Edit/5

    [HttpPost]
    public ActionResult Edit(string id, iamp_mapping IAMP)
    {
        try
        {
            using (var db = new PaEntities())
            {
                db.Entry(IAMP).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Pa");
            }
        }
        catch
        {
            return View();
        }
    }

    //
    // GET: /Pa/Delete/5

    public ActionResult Delete(string id)
    {
        using (var db = new PaEntities())
        {

            return View(db.iamp_mapping.Find(id));
        }
    }

    //
    // POST: /Pa/Delete/5

    [HttpPost]
    public ActionResult Delete(string id, iamp_mapping IAMP)
    {
        try
        {
            using (var db = new PaEntities())
            {
                db.Entry(IAMP).State = EntityState.Deleted;
                db.SaveChanges();
                return RedirectToAction("Pa");
            }

        }
        catch
        {
            return View();
            }
        }
    }
}

ИНДЕКС Класс

   @model IEnumerable<DBFirstMVC.Models.iamp_mapping>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            PA
        </th>
        <th>
            MAJOR PROGRAM
        </th>
        <th>
            INVESTMENT AREA
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.PA)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.MAJOR_PROGRAM)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.INVESTMENT_AREA)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.PA }) |

            @Html.ActionLink("Delete", "Delete", new { id=item.PA })
        </td>
    </tr>
}

</table>

1 Ответ

2 голосов
/ 30 марта 2012

Так что я разобрался со своим вопросом, хотя в это время 27 человек смотрели на мой вопрос в это время даже без комментариев (не горько просто говорить).Причина, по которой это происходит, заключается в том, что после удаления строки первичный ключ удаляется и возвращает нулевое значение.Первичные ключи не могут иметь нулевые значения, поэтому мой код выдает здесь ошибку.

[HttpPost]
        public ActionResult Delete(string id, iamp_mapping IAMP)
        {
            try
            {
                using (var db = new PaEntities())
                {
                    db.Entry(IAMP).State = EntityState.Deleted; <---------
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }


        }
        catch (Exception e)
        {
            throw (e);
            //return View();
        }
    }

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

[HttpPost]
        public ActionResult Delete(string id, iamp_mapping IAMP)
        {
            try
            {
                using (var db = new PaEntities())
                {
                    var vIAMP = db.iamp_mapping.Find(id); <---------------
                    db.Entry(vIAMP).State = EntityState.Deleted;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }

            }
            catch (Exception e)
            {
                throw (e);
                //return View();
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...