[英]I'm trying to populate my textboxes whenever I select an item in a listbox but I'm stuck with this error
[英]I'm stuck on this "InvalidOperationException Error" when trying to delete a record in my Database
我得到的完整错误:
我将我的索引页面作为部分视图传递给我的 _Layout.cshtml,这可能是我的错误的原因,但我不确定我做错了什么,为什么它也会影响我的 MC_Delete 页面? 我的索引视图看起来像我的管理客户视图,但您只能删除。
_Layout.cshtml
(我知道我在创建项目时打错字了)
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Custstomer_Management_System</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
@*<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action=""></a>*@
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Customer" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Customer" asp-action="ManageCustomer">Manage Customer</a>
</li>
@*<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Customer" asp-action="Delete">Create</a>
</li>*@
</ul>
</div>
</div>
@*<a href="C:\Users\winte\Desktop\Arksoft\Custstomer Management System\Views\Home\Privacy.cshtml">C:\Users\winte\Desktop\Arksoft\Custstomer Management System\Views\Home\Privacy.cshtml</a>*@
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
@{
Html.Partial("Index");
}
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2022 - Custstomer_Management_System - <a asp-area="" asp-controller="Home" asp-action="Privacy"></a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
管理客户视图
@model IEnumerable<Custstomer_Management_System.Models.Customer>
@{
ViewData["Title"] = "ManageCustomer";
}
<h1>Manage Customer</h1>
<p>
<a class="btn btn-primary" asp-area="" asp-controller="Customer" asp-action="Create">Create New Customer</a>
</p>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Address)
</th>
<th>
@Html.DisplayNameFor(model => model.TelNo)
</th>
<th>
@Html.DisplayNameFor(model => model.ContactPersonName)
</th>
<th>
@Html.DisplayNameFor(model => model.ContactPersonEmail)
</th>
<th>
@Html.DisplayNameFor(model => model.VatNo)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Address)
</td>
<td>
@Html.DisplayFor(modelItem => item.TelNo)
</td>
<td>
@Html.DisplayFor(modelItem => item.ContactPersonName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ContactPersonEmail)
</td>
<td>
@Html.DisplayFor(modelItem => item.VatNo)
</td>
<td>
<a asp-action="Update" asp-route-id="@item.Id" class="btn btn-primary mx-1">Edit</a>
@*<a asp-action="Details" asp-route-id="@item.Id">Details</a> |*@
<a asp-action="MC_Delete" asp-route-id="@item.Id" class="btn btn-danger mx-1">Delete</a>
</td>
</tr>
}
</tbody>
</table>
删除视图
@model Custstomer_Management_System.Models.Customer
@{
ViewData["Title"] = "MC_Delete";
}
<h1>MC_Delete</h1>
<h3>Are you sure you want to delete this?</h3>
<div>
<h4>Customer</h4>
<hr />
<dl class="row">
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Name)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Name)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Address)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Address)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.TelNo)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.TelNo)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.ContactPersonName)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.ContactPersonName)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.ContactPersonEmail)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.ContactPersonEmail)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.VatNo)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.VatNo)
</dd>
</dl>
<form asp-action="MC_DeletePost">
<input type="hidden" asp-for="Id" />
<input type="submit" value="Delete" class="btn btn-danger" /> |
<a asp-action="Index">Back to List</a>
</form>
</div>
Controller
//GET
public IActionResult MC_Delete(int? id)
{
if (id == null || id == 0)
{
return NotFound();
}
var obj = _db.Customer.Find(id);
if (obj == null)
{
return NotFound();
}
return View(obj);
}
//POST Delete
[HttpPost]
public IActionResult MC_DeletePost(int? id)
{
var obj = _db.Customer.Find(id);
if (obj == null)
{
return NotFound();
}
_db.Customer.Remove(obj);
_db.SaveChanges();
return RedirectToAction("Index");
}
视图使用的布局似乎需要“客户 []”(客户列表)的 model,并且您将其传递给客户。 您的代码中的某处似乎应该使用
return View(_db.Customer);
代替
return View(_db.Customer.Find(id));
在您的“管理客户”视图中,您期望一个 IEnumerable 类型,即客户列表,而不是您从 Controller 传递单个客户 Object。
根据您视图中的代码,如果您在访问客户 object 的属性时从顶部的@model 声明中删除 IEnumerable,它应该可以正常工作,可以像这样在列表中访问这些属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.