实体框架无法删除编辑和详细信息

时间:2014-10-01 07:24:45

标签: c# razor

我使用c#razor构建alittke网站。

我有一个名为&#34的模型类; clientModel"。

我使用实体框架进行了crud操作。

起初,evrything工作得很好。

但是当我从" tracingNumber"更改了clientModel类的主键时到" emailAdress"我无法从网站上删除和编辑数据库。 当我尝试这样做时,我得到HTTP错误404.0 - 未找到。

任何想法?

控制器:

    using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using VicoProject___NewVersion.Models;

namespace Project___NewVersion.Controllers
{
    public class ClientController : Controller
    {
        private ClientModelsDBContext db = new ClientModelsDBContext();

        //
        // GET: /Model/

        public ActionResult Index()
        {
            return View(db.Clients.ToList());
        }

        //
        // GET: /Model/Details/5

        public ActionResult Details(int id = 0)
        {
            ClientModels clientmodels = db.Clients.Find(id);
            if (clientmodels == null)
            {
                return HttpNotFound();
            }
            return View(clientmodels);
        }

        //
        // GET: /Model/Create

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

        //
        // POST: /Model/Create

        [HttpPost]
        public ActionResult Create(ClientModels clientmodels)
        {
            if (ModelState.IsValid)
            {
                db.Clients.Add(clientmodels);
                db.SaveChanges();
                return RedirectToAction("Index", "Home");
            }

            return View(clientmodels);
        }

        //
        // GET: /Model/Edit/5

        public ActionResult Edit(int id = 0)
        {
            ClientModels clientmodels = db.Clients.Find(id);
            if (clientmodels == null)
            {
                return HttpNotFound();
            }
            return View(clientmodels);
        }

        //
        // POST: /Model/Edit/5

        [HttpPost]
        public ActionResult Edit(ClientModels clientmodels)
        {
            if (ModelState.IsValid)
            {
                db.Entry(clientmodels).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(clientmodels);
        }

        //
        // GET: /Model/Delete/5

        public ActionResult Delete(int id = 0)
        {
            ClientModels clientmodels = db.Clients.Find(id);
            if (clientmodels == null)
            {
                return HttpNotFound();
            }
            return View(clientmodels);
        }

        //
        // POST: /Model/Delete/5



        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            ClientModels clientmodels = db.Clients.Find(id);
            db.Clients.Remove(clientmodels);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }


        public ActionResult Search(string search)
        {
            var r = db.Clients.Where(t => t.emailAdress.Contains(search) || t.name.Contains(search)).ToList();
            Console.Write(r);
          return RedirectToAction("Search");


        }
    }
}

客户端模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;

namespace Project___NewVersion.Models
{
    public class ClientModels
    {

        [Required]
        public string name { get; set;}
        [Required]
        [MaxLength(10, ErrorMessage = "Phone Number must be 10 numbers") , MinLength(10, ErrorMessage = "Phone Number must be 10 numbers")]
        [DataType(DataType.PhoneNumber, ErrorMessage = "Invalid Phone Number")]
        public String phoneNumber { get; set; }
        [Key]
        [Required]
        [DataType(DataType.EmailAddress, ErrorMessage = "Invalid Email Address")]
        public string emailAdress { get; set; }
    }

    public class ClientModelsDBContext : DbContext
    {
        static ClientModelsDBContext()
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ClientModelsDBContext>());
        }
        public DbSet<ClientModels> Clients { get; set; }
    }


}

客户端/索引视图:

<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.phoneNumber)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.emailAdress)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.phoneNumber)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.emailAdress)
        </td>
        <td>

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

</table> 

1 个答案:

答案 0 :(得分:0)

带签名的功能

public ActionResult Delete(int id = 0)
需要调用

。这个参数是一个int。我假设自从更改它后,id现在是一个字符串 - 所以框架不知道要调用哪个方法。