ASP.NET Core:如何在视图展示控制器somma值?求代码优化建议
如何在ASP.NET Core视图中显示控制器的somma变量值
嘿,作为年轻开发者,咱们一步步来解决这个问题,顺便给你几个实用的优化建议:
首先先修正控制器里一个容易踩的坑:你用了.Result来获取异步方法的结果,这很容易导致死锁,咱们换成async/await的正确异步写法。然后,要把somma的值传递到视图,有几种常用方式,我给你一一说明:
方法1:使用ViewBag(快速简单,适合小场景)
修改你的控制器方法:
[HttpGet] public async Task<IActionResult> TotaleOreComplessivo() { // 用LINQ直接求和,替代foreach,代码更简洁 var cedolini = await _repoC.GetAll(); decimal somma = cedolini.Sum(cedo => cedo.NumeroOre); // 把求和结果存入ViewBag ViewBag.TotaleOre = somma; return View(); }
然后在视图的第二个<td>里输出值:
<table class="table-display dt-responsive" id="Ore"> <tr> <td>Totale Ore Fatturate:</td> <td>@ViewBag.TotaleOre</td> </tr> </table>
方法2:使用ViewData(和ViewBag类似,基于字典的方式)
控制器修改:
[HttpGet] public async Task<IActionResult> TotaleOreComplessivo() { var cedolini = await _repoC.GetAll(); decimal somma = cedolini.Sum(cedo => cedo.NumeroOre); ViewData["TotaleOre"] = somma; return View(); }
视图对应修改:
<td>@ViewData["TotaleOre"]</td>
方法3:使用强类型ViewModel(推荐,类型更安全,适合复杂场景)
这种方式更规范,尤其是当你需要传递多个数据到视图时。首先创建一个ViewModel类:
public class TotaleOreViewModel { public decimal TotaleOreFatturate { get; set; } }
然后修改控制器:
[HttpGet] public async Task<IActionResult> TotaleOreComplessivo() { var cedolini = await _repoC.GetAll(); decimal somma = cedolini.Sum(cedo => cedo.NumeroOre); var viewModel = new TotaleOreViewModel { TotaleOreFatturate = somma }; return View(viewModel); }
最后在视图顶部指定模型,然后输出值:
@model TotaleOreViewModel <table class="table-display dt-responsive" id="Ore"> <tr> <td>Totale Ore Fatturate:</td> <td>@Model.TotaleOreFatturate</td> </tr> </table>
额外提一句:用LINQ的Sum方法替代手动foreach求和,代码更简洁易读,也减少出错概率哦~
内容的提问来源于stack exchange,提问作者CSharper
相关产品推荐
相关产品推荐

