首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ViewBag的计数和求和函数

基于ViewBag的计数和求和函数
EN

Stack Overflow用户
提问于 2022-02-07 18:25:26
回答 2查看 193关注 0票数 1

我有一个问题如何解决我的问题。有一张有物品的桌子。每个项目都具有“打开”或“关闭”的状态。例如,9项具有“关闭”状态,14项具有“打开”状态。我需要找到开放项和封闭项(14 - 9 = 5)之间的区别。我如何在ViewBag的帮助下做到这一点?据我所知,需要在控制器中编写“计数”函数,并通过ViewBag将结果传输到View。但我不知道怎么写这段代码。结果应该显示在“视图”页面上。

Request.cs (模型):

代码语言:javascript
复制
public class Request
{
    public int Id { get; set; }
    public string Name { get; set; } = "";
    public string Status { get; set; } = "";
}

Controller.cs:

代码语言:javascript
复制
public IActionResult Requests()
{
    var Requests = _repo.GetAllRequests();
    return View(Requests);
}

储存库:

代码语言:javascript
复制
public Request GetRequest(int id)
{
    return _ctx.Requests.FirstOrDefault(c => c.Id == id);
}

public List<Request> GetAllRequests()
{
    return _ctx.Requests.ToList();
}

查看:

代码语言:javascript
复制
<div>
    <table>
        @foreach (var request in Model)
        {
        <tr>
            <th>@request.Name</th>
            <th>@request.Status</th>
        </tr>
        }
    </table>
</div>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-07 18:45:24

您将向Count传递一个谓词,以按状态筛选请求:

代码语言:javascript
复制
public IActionResult Requests()
{
    var requests = _repo.GetAllRequests();

    ViewBag.OpenRequests = requests.Count(r => r.Status == "open");
    ViewBag.ClosedRequests = requests.Count(r => r.Status == "closed");

    return View(requests);
}

但是,您可以创建一个视图模型来保存视图所需的所有信息/数据,而不是使用ViewBag

代码语言:javascript
复制
// ViewModel
public class RequestViewModel
{
    public List<Request> Requests { get; set; }
    public int OpenRequests { get; set; }
    public int ClosedRequests { get; set; }
}

// Controller
public IActionResult Requests()
{
    var requests = _repo.GetAllRequests();
    
    var viewModel = new RequestViewModel();
    viewModel.OpenRequests = requests.Count(r => r.Status == "open");
    viewModel.ClosedRequests = requests.Count(r => r.Status == "closed");
    viewModel.Requests = requests;

    return View(viewModel);
}

// View: set the model for the view
@model Project.Namespace.RequestViewModel
...
<div>
    <div>Open Requests: @model.OpenRequests</div>
    <div>Closed Requests: @model.ClosedRequests</div>
    <div>Difference/delta: @(model.OpenRequests - model.ClosedRequests)</div>
</div>
票数 0
EN

Stack Overflow用户

发布于 2022-02-07 18:53:05

代码语言:javascript
复制
    private StatisticScore()
    {
        var openCount =_ctx.Requests.Where(m=> m.Status == "Open").Count();
       var closedCount = _ctx.Requests.Where(m=> m.Status == "Closed").Count();
        ViewBag.Difference  = openCount  - closedCount 
    }

代码语言:javascript
复制
  <label> Difference </label> @ViewBag.Difference 

另外,我建议您不要将状态字段用作字符串。如果你把它当作一个明灯,你会更容易的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71023567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档