You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:25:57