ASP.NET Core中的 HttpPost Edit 操作方法
admin
2021-06-03本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP)
本文出自《从零开始学 ASP.NET Core 与 EntityFramework Core》目录
视频课程效果更佳:跨平台开发实战掌握 ASP.NET Core 与 EntityFramework Core
完成 HttpPost 的 Edit 操作方法
在本章节中,我们希望实现响应 HttpPost 的 Edit 操作,来更新我们的学生信息。
当我们单击更新按钮的时候,我们会拦截和处理表单数据然后发布到服务器上。
Post 请求的 Edit 操作方法
请看以下代码,我们已经在必要的地方添加了解释代码。
//通过模型绑定,作为操作方法的参数
//StudentEditViewModel 会接收来自Post请求的Edit表单数据
[HttpPost]
public IActionResult Edit(StudentEditViewModel model)
{
//检查提供的数据是否有效,如果没有通过验证,需要重新编辑学生信息
//这样用户就可以更正并重新提交编辑表单
if (ModelState.IsValid)
{
//从数据库中查询正在编辑的学生信息
Student student = _studentRepository.GetStudent(model.Id);
//用模型对象中的数据更新student对象
student.Name = model.Name;
student.Email = model.Email;
student.Major = model.Major;
//如果用户想要更改照片,可以上传新照片它会被模型对象上的Photo属性接收
//如果用户没有上传照片,那么我们会保留现有的照片信息
if (model.Photo != null)
{
//如果上传了新的照片,则必须显示新的照片信息
//因此我们会检查当前学生信息中是否有照片,有的话,就会删除它。
if (model.ExistingPhotoPath != null)
{
string filePath = Path.Combine(hostingEnvironment.WebRootPath,
"images", model.ExistingPhotoPath);
System.IO.File.Delete(filePath);
}
//我们将保存新的照片到 wwwroot/images 文件夹中,并且会更新
//Student对象中的PhotoPath属性,然后最终都会将它们保存到数据库中
student.PhotoPath = ProcessUploadedFile(model);
}
//调用仓储服务中的Update方法,保存studnet对象中的数据,更新数据库表中的信息。
Student updatedstudent = _studentRepository.Update(student);
return RedirectToAction("index");
}
return View(model);
}
以下是私有方法 ProcessUploadedFile()的作用说明,该方法是将照片保存在wwwroot/images文件夹中,并且返回唯一的文件名。然后我们将此文件名赋值到 student 对象中的 PhotoPath 属性中,该值最后会保存到数据库中。
///<summary>
///将照片保存到指定路径中,并返回唯一的文件名
///</summary>
///<param name="model"></param>
///<returns></returns>
private string ProcessUploadedFile(StudentCreateViewModel model)
{
string uniqueFileName = null;
if (model.Photo != null)
{
string uploadsFolder = Path.Combine(hostingEnvironment.WebRootPath, "images");
uniqueFileName = Guid.NewGuid().ToString() + "_" + model.Photo.FileName;
string filePath = Path.Combine(uploadsFolder, uniqueFileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
model.Photo.CopyTo(fileStream);
}
}
return uniqueFileName;
}
文章说明
如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦
未得到授权不得擅自转载本文内容,52abp.com 保留版权
感谢您对我的支持