ASP.NET Mvc开发之删除修改数据
在ASP.NET Mvc开发中,删除修改数据是非常常见的操作。本文将分享一些实现这些操作的完整攻略。
删除数据
确认删除
在进行删除操作时,需要先向用户确认是否真的要删除该条数据。为此,我们可以使用JavaScript弹出确认框。以下是一个示例:
function confirmDelete(url) {
if (confirm("确定要删除这条记录吗?")) {
window.location = url;
}
}
该函数接受一个参数url
,表示要跳转到的删除操作的URL地址。当用户点击确认删除时,该函数会跳转到该URL地址。我们可以通过如下方式在视图中调用该函数:
<a href="#" onclick="confirmDelete('@Url.Action("Delete", new { id = item.Id})')">删除</a>
其中,item.Id
表示要删除的数据的ID,@Url.Action("Delete", new { id = item.Id})
生成了一个对应删除操作的URL地址。
删除操作
在MVC框架中,删除操作通常在控制器中实现。以下是一个示例控制器的代码:
public class DeleteController : Controller
{
private readonly MyDbContext _dbContext;
public DeleteController(MyDbContext dbContext)
{
_dbContext = dbContext;
}
[HttpPost]
public async Task<IActionResult> Index(int id)
{
var data = await _dbContext.MyData.FindAsync(id);
if (data == null)
return NotFound();
_dbContext.MyData.Remove(data);
await _dbContext.SaveChangesAsync();
return RedirectToAction("Index");
}
}
该控制器接受一个id
参数,表示要删除的数据的ID。它先通过调用_dbContext.MyData.FindAsync(id)
方法找到对应的数据,如果不存在则返回404错误。接着,调用_dbContext.MyData.Remove(data)
删除数据,并通过调用_dbContext.SaveChangesAsync()
方法保存更改。最后,返回一个重定向操作,将用户重定向到数据列表页面。
修改数据
编辑页面
在进行修改操作时,需要先向用户展示一个数据编辑页面。以下是一个示例:
@model MyData
<h2>编辑数据</h2>
<form asp-action="Edit" asp-route-id="@Model.Id" method="post">
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Age" class="control-label"></label>
<input asp-for="Age" class="form-control" />
</div>
<button type="submit" class="btn btn-primary">保存</button>
</form>
该页面接受一个MyData
类型的数据模型,并展示该数据模型的各种属性。用户可以修改这些属性并点击保存按钮提交更改。
修改操作
在MVC框架中,修改操作通常在控制器中实现。以下是一个示例控制器的代码:
public class EditController : Controller
{
private readonly MyDbContext _dbContext;
public EditController(MyDbContext dbContext)
{
_dbContext = dbContext;
}
[HttpGet]
public async Task<IActionResult> Index(int id)
{
var data = await _dbContext.MyData.FindAsync(id);
if (data == null)
return NotFound();
return View(data);
}
[HttpPost]
public async Task<IActionResult> Index(int id, MyData newData)
{
if (id != newData.Id)
return BadRequest();
_dbContext.Entry(newData).State = EntityState.Modified;
await _dbContext.SaveChangesAsync();
return RedirectToAction("Index");
}
}
该控制器包含两个操作方法。HttpGet
方法用于展示数据编辑页面,接受一个id
参数表示要编辑的数据的ID,通过调用_dbContext.MyData.FindAsync(id)
方法找到对应的数据并将其传递给视图。HttpPost
方法用于处理用户修改的数据,并将更改保存到数据库中。它接受一个id
参数表示要修改的数据的ID,以及一个newData
参数表示用户修改后的数据。该方法首先判断id
参数和newData
参数的ID是否一致,如果不一致则返回400错误。接着,将newData
数据模型的状态设置为修改状态,并通过调用_dbContext.SaveChangesAsync()
保存更改。最后,返回一个重定向操作,将用户重定向到数据列表页面。
示例说明
示例1:删除数据
例如,我们有一个学生信息查询页面,用户可以通过该页面查看所有学生的信息。每个学生都有一个删除按钮,用户可以通过点击该按钮删除对应学生的信息。以下是一个该页面的示例视图代码:
@model IEnumerable<Student>
<h2>学生信息查询</h2>
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.Name</td>
<td>@item.Age</td>
<td>
<a href="@Url.Action("Edit", new { id = item.Id})">编辑</a>
<a href="#" onclick="confirmDelete('@Url.Action("Delete", new { id = item.Id})')">删除</a>
</td>
</tr>
}
</tbody>
</table>
在该视图中,我们通过调用@Url.Action
方法为删除和编辑操作生成对应的URL地址,并在对应的按钮上添加了点击事件,通过JavaScript弹出确认框来确认删除操作。
以下是该页面对应的控制器代码:
public class StudentController : Controller
{
private readonly MyDbContext _dbContext;
public StudentController(MyDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<IActionResult> Index()
{
var students = await _dbContext.Students.ToListAsync();
return View(students);
}
[HttpPost]
public async Task<IActionResult> Delete(int id)
{
var student = await _dbContext.Students.FindAsync(id);
if (student == null)
return NotFound();
_dbContext.Students.Remove(student);
await _dbContext.SaveChangesAsync();
return RedirectToAction("Index");
}
}
在该控制器中,我们先通过调用_dbContext.Students.ToListAsync()
方法获取所有学生的数据,并将数据传递给视图。在[HttpPost]
操作中,我们通过调用_dbContext.Students.FindAsync(id)
方法获取对应ID的学生数据,并将其删除并保存更改。
示例2:修改数据
例如,我们有一个学生信息管理页面,用户可以通过该页面查看和修改所有学生的信息。以下是一个该页面的示例视图代码:
@model Student
<h2>学生信息管理</h2>
<form asp-action="Edit" asp-route-id="@Model.Id" method="post">
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Age" class="control-label"></label>
<input asp-for="Age" class="form-control" />
</div>
<button type="submit" class="btn btn-primary">保存</button>
</form>
在该视图中,我们同样通过调用asp-action
和asp-route-id
指定了对应的URL地址。用户可以修改学生的姓名和年龄,并点击保存按钮提交更改。
以下是该页面对应的控制器代码:
public class StudentController : Controller
{
private readonly MyDbContext _dbContext;
public StudentController(MyDbContext dbContext)
{
_dbContext = dbContext;
}
[HttpGet]
public async Task<IActionResult> Edit(int id)
{
var student = await _dbContext.Students.FindAsync(id);
if (student == null)
return NotFound();
return View(student);
}
[HttpPost]
public async Task<IActionResult> Edit(int id, Student newStudent)
{
if (id != newStudent.Id)
return BadRequest();
_dbContext.Entry(newStudent).State = EntityState.Modified;
await _dbContext.SaveChangesAsync();
return RedirectToAction("Index");
}
}
在该控制器中,我们同样通过FindAsync
方法来获取对应ID的学生数据。在[HttpPost]
操作中,我们将newStudent
数据模型的状态设置为修改状态,然后通过SaveChangesAsync
方法将更改保存到数据库中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Mvc开发之删除修改数据 - Python技术站