如何用ViewModel替代ViewBag并创建它计算banhotosaid+transpote Id值返回视图
用ViewModel替代ViewBag并计算ID总和的实现方案
没问题,我来一步步帮你搞定这个需求——用ViewModel替代ViewBag,同时实现两个ID的求和逻辑并返回给视图。
1. 创建你的ViewModel类
首先咱们得定义一个ViewModel,它要包含需要展示的两个ID字段,以及计算总和的属性。这个类建议放在项目的ViewModels文件夹下(没有的话直接新建一个就行):
namespace YourProjectName.ViewModels { public class IdSumViewModel { // 对应banhotosaid的属性,遵循C#命名规范用PascalCase public int BanhoTosaId { get; set; } // 对应transpote Id的属性 public int TranspoteId { get; set; } // 只读属性,自动计算两个ID的总和,无需额外方法 public int TotalSum => BanhoTosaId + TranspoteId; } }
这里用表达式体属性实现TotalSum,访问时会自动计算总和,简洁又高效,还把计算逻辑封装在了ViewModel里,符合关注点分离的原则。
2. 在控制器中替换ViewBag,使用ViewModel
接下来把控制器里原来用ViewBag传值的逻辑,改成实例化ViewModel并赋值,再传给视图:
using YourProjectName.ViewModels; using Microsoft.AspNetCore.Mvc; public class YourController : Controller { public IActionResult CalculateSum() { // 这里模拟从数据库/业务逻辑层获取两个ID的实际值 int banhoTosaId = 15; int transpoteId = 7; // 实例化ViewModel并给字段赋值 var viewModel = new IdSumViewModel { BanhoTosaId = banhoTosaId, TranspoteId = transpoteId }; // 把ViewModel传给视图,彻底替代ViewBag return View(viewModel); } }
对比ViewBag,ViewModel是强类型的——编译时就能检查出属性名拼写错误,不会出现运行时才暴露的低级问题,后续维护起来也更省心。
3. 在视图中使用ViewModel展示数据
最后在对应的Razor视图里,先指定ViewModel的类型,然后直接访问它的属性即可:
@model YourProjectName.ViewModels.IdSumViewModel <div class="container mt-4"> <h2>ID总和计算结果</h2> <div class="row mt-3"> <div class="col-md-6"> <p>BanhoTosa ID: <strong>@Model.BanhoTosaId</strong></p> <p>Transpote ID: <strong>@Model.TranspoteId</strong></p> </div> <div class="col-md-6"> <h4 class="text-success">总和: @Model.TotalSum</h4> </div> </div> </div>
视图只负责展示数据,计算逻辑完全放在ViewModel里,这样代码结构更清晰,也符合MVC的设计思想。
为什么用ViewModel比ViewBag好?
- 类型安全:编译时就能发现属性名错误,避免运行时异常
- 可读性更强:其他开发者看代码时,一眼就能知道视图需要哪些数据
- 可维护性更高:如果要修改字段或计算逻辑,只需要改动ViewModel,不用在多个地方找ViewBag的引用
内容的提问来源于stack exchange,提问作者caio oliveira
相关产品推荐
相关产品推荐

