将记录移至存档视图 非软删除
Posted
技术标签:
【中文标题】将记录移至存档视图 非软删除【英文标题】:Move record to Archived View Not soft delete 【发布时间】:2019-11-13 01:44:25 【问题描述】:我想在表中添加一个存档按钮,因此当单击它时,该行中的数据会移动到另一个名为存档的视图中,我已经确定了编辑和删除所有内容。与软删除不同,记录只会从归档视图的索引。这可能很简单,但我不知道如何。 我不知道我是否需要一个新模型用于存档或我的表中的新列已存档,但正如我所提到的,存档按钮应该只将记录移动到具有所有存档记录的不同视图,也许我需要在数据库中为主表中的所有存档数据创建一个新表。这是我到目前为止所拥有的: 查看:
@model IEnumerable<practice2.Models.Customer>
@
ViewBag.Title = "Archive";
Layout = "~/Views/Shared/_Layout.cshtml";
<h2>Archive</h2>
<div class="container">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th> User Name</th>
<th>Date Of Birth</th>
<th>Membership Type</th>
<th>Email</th>
</tr>
</thead>
<tbody>
@foreach (var customer in Model)
<tr>
<td>@Html.ActionLink(customer.LastName, "Details", "Customers", new id = customer.Id , null)</td>
<td>@customer.DateOfBirth.Value.ToShortDateString()</td>
<td>@customer.MembershipType.NameOfMembershipType</td>
<td>@customer.EmailAddress</td>
</tr>
</tbody>
</table>
</div>
控制器:
public ActionResult Archive (int? id)
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
Customer customer = _context.Customer.Find(id);
if (customer == null)
return HttpNotFound();
_context.Customer.Move(customer)to archive;// I wish it was this easy
_context.SaveChanges();
return RedirectToAction("Index", "Customers");
谢谢……
【问题讨论】:
【参考方案1】:在我看来,您可以在这里采用 2 种方式,具体取决于您之后想要如何处理数据。按照您的建议创建一个新的存档表,或者只是在您当前的客户表中添加一个额外的列。
如果您创建一个新表,您首先将需要的值从您的客户表复制到您的存档表,然后从客户表中删除数据。
或者,您在 Customer 表中添加一个额外的列,例如IsArchived,并将其设为布尔值(在 Sql 中为位)。将“客户已归档”设置为 true,否则设置为 false。 然后您可以根据此值在不同的 Controller 中过滤您的客户。
如果表中已有数据,请将其设为可为空的 bool (bool?) - (SqL - Allow Null) 并将空值视为 false。
编辑
如果人们有同样的问题:
IN 模型添加:
public bool? IsArchived set; get;
Nu-get
Add-migration AddNewColumnToWhatever
Update-database
在控制器中:
public ActionResult Archive(int? id)
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
Customer customer = _context.Customer.Find(id);
if (customer == null)
return HttpNotFound();
customer.IsArchived = true;
return RedirectToAction("Index", "Customers");
public ActionResult GetCustomers(string typeOfCustomer)
List<Customer> customers = new List<Customer>();
if (string.IsNullOrEmpty(typeOfCustomer))
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
if (typeOfCustomer == "archived")
customers = _context.Customer.Include(c => c.MembershipType).Where(x => x.IsArchived == true).Select(x => x).ToList();
else if (typeOfCustomer == "active")
customers = _context.Customer.Include(c => c.MembershipType).Where(x => x.IsArchived == false).Select(x => x).ToList();
else
return HttpNotFound();
return View(customers);
为 GetCustomers 创建一个新视图并定义模型:
@model List<YourProject.FolderWhereYourClassIsDefined.Customer>
并按照您的意愿构建您的视图。
在您现有的视图中,放置 2 个按钮来调用新的 ActionResult。
@Html.ActionLink("View Archived", "GetCustomers", "Customers", new typeOfCustomer = "archived" , new @class = "btn" )
@Html.ActionLink("View Active", "GetCustomers", "Customers", new typeOfCustomer = "active" , new @class = "btn" )//You don't need it
现在在索引控制器中执行此操作:
var customer = _context.Customer.Include(c => c.MembershipType)
.Where(c => c.IsArchived == null)// important
.Where(c => c.IsArchived == false) // important
.Include(c => c.CardType)
.ToList();//to excute query immediatly
你应该一切都好。 LasseHolm/EndlessQ
【讨论】:
我在模型中创建了这个“public bool?IsArchived set; get; ”。在存档操作中,我更改了“_context.Customer.IsArchived = true;”到“customer.IsArchived = true;”在 GetCustomers 中,当我将其设置为已归档的私有字符串时,它说活动和归档没有任何价值;始终为空。所以在视图中,当我点击“存档”时没有任何反应,当我点击你给我的 btn 时,我得到 404。 意识到我忘记了每个 ToList() 之前的 select 语句 - 请参阅更新的代码。这应该够了吧。对于这两个按钮,如果您使用引导 css,我认为您应该将 @class= “btn” + 任何额外的样式添加到 Line。不是我出于演示目的而放入的“按钮”。同样,您是对的, _context 应该在设置为 true 的部分中省略。远离编辑器时编写代码并不容易...... 哦! 404...您是否创建了一个 GetCustomers 视图来显示 List以上是关于将记录移至存档视图 非软删除的主要内容,如果未能解决你的问题,请参考以下文章