我使用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>
答案 0 :(得分:0)
带签名的功能
public ActionResult Delete(int id = 0)
需要调用。这个参数是一个int。我假设自从更改它后,id现在是一个字符串 - 所以框架不知道要调用哪个方法。