ASP.NET Core 5 MVC:绑定Book视图时如何调用Author单值属性?
方法1:创建组合视图模型(ViewModel)
这是MVC开发中最规范的做法,通过专门的视图模型整合多个实体数据,完全符合“视图绑定单个模型”的要求。
操作步骤:
- 定义包含Book和Author的视图模型:
public class BookAuthorViewModel { public Book Book { get; set; } public Author Author { get; set; } }
- 控制器中实例化视图模型并填充数据:
public IActionResult Details(int id) { // 从数据源获取Book和对应Author数据 var book = _bookRepo.GetById(id); var author = _authorRepo.GetByBookId(id); var viewModel = new BookAuthorViewModel { Book = book, Author = author }; return View(viewModel); }
- 修改视图的模型绑定为该视图模型:
@model BookAuthorViewModel <!-- 访问Book属性 --> <p>书名:@Model.Book.Name</p> <!-- 访问Author属性 --> <p>作者:@Model.Author.Name</p>
方法2:扩展Book模型,添加Author关联属性
如果业务上Book与Author本身存在关联关系,可直接在Book类中添加Author属性:
操作步骤:
- 修改Book模型:
public class Book { public int ID { get; set; } [Required] public string Name { get; set; } [Required] public int Pages { get; set; } // 添加Author关联属性 public Author Author { get; set; } }
- 控制器查询时加载关联的Author数据(以EF Core为例):
public IActionResult Details(int id) { var book = _context.Books.Include(b => b.Author).FirstOrDefault(b => b.ID == id); return View(book); }
- 原视图中直接访问Author属性:
@model Book <p>书名:@Model.Name</p> <p>作者:@Model.Author.Name</p>
方法3:使用ViewData/ViewBag传递Author数据
如果不想修改模型或创建新视图模型,可通过ViewData/ViewBag临时传递数据,适合简单场景:
操作步骤:
- 控制器中存入Author数据:
public IActionResult Details(int id) { var book = _bookRepo.GetById(id); var author = _authorRepo.GetByBookId(id); ViewData["Author"] = author; // 也可以用ViewBag:ViewBag.Author = author; return View(book); }
- 视图中取出并强转后访问:
@model Book <p>书名:@Model.Name</p> @{ var author = ViewData["Author"] as Author; } @if (author != null) { <p>作者:@author.Name</p> }
内容的提问来源于stack exchange,提问作者Farid Faiz
相关产品推荐
相关产品推荐

