好吧,我是Asp.net Mvc的新手,我只是从头开始学习,我有一个控制支出和收入的应用程序,我现在想做的是基于收入列表,支出给了我用户余额,即时通讯在尝试控制此功能时遇到很多问题,我不知道自己是否以正确的方式进行操作

这是我的模型:

public class Balance
    {
        public int BalanceId { get; set; }
        public List<Expense> Despesas { get; set; }
        public List<Earning> Rendimentos { get; set; }
        public string ApplicationUserId { get; set; }
    }


我所做的就是,首先尝试控制用户何时插入“收入”或类似的行,并通过“费用和收入创建方法”来验证用户是否已经存在于数据库中,如果不存在,他添加aplicationUserId和昂贵或所得。

我希望余额出现在每个页面中,所以我将此添加到了Layout.cshtml

<li>@Html.Action("GetBalance", "Home")</li>


它调用控制器GetBalance:

public PartialViewResult GetBalance()
    {
        var userId = User.Identity.GetUserId();
        var balance = db.Balance.Where(d => d.ApplicationUserId == userId);
        return PartialView("_GetBalance",balance);
    }


将余额模型发送到视图_GetBalance:

@model <MSDiary.Models.Balance>

<p>Saldo: @GetBalance()</p>

@functions
{
    HtmlString GetBalance()
    {
        decimal saldo = 0;

    if (Model.Expense.Count != 0 || Model.Earning.Count != 0)
    {
        foreach (var item in Model.Despesas)
        {
            balance += item.EarningValue;
        }
        foreach (var item in Model.Rendimentos)
        {
            balance -= item.ExpenseValor;
        }
    }

    return new HtmlString(balance.ToString());
}
}


我想知道的是,如果有一种更简单的方法可以做到这一点,或者我可以做些什么来做我想做的事情,我就无法理解为什么我的观点期望有所不同,有人可以向我解释我做错了什么吗?

附言:对不起,我的英语很长,但我想了解更多:)

最佳答案

首先,需要将模型@model <MSDiary.Models.Balance>更改为:

@model IEnumerable<MSDiary.Models.Balance>


另外,理想情况下,方法GetBalance应该放置在类中,而不是在GetBalance部分视图中。您可以通过扩展方法来实现这两种方式,也可以使用Balance View模型,该模型将计算出的余额作为属性,然后传递给您的视图。

例如,通过扩展方法:

public static class BalanceExtensions
{
    public static string GetBalance(this Balance balance)
    {
       string displayBalance = "0:00";

       // Your logic here
       return displayBalance;
    }
}


然后在“部分视图”中可以使用新的HTML Helper:

@Html.GetBalance();


另外要注意的是,我将费用和收入的List更改为IEnumerable,因为您似乎只是在公开数据,而不是在处理数据。

您的模型将如下所示:

public class Balance
{
   public int BalanceId { get; set; }
   public IEnumerable<Expense> Despesas { get; set; }
   public IEnumerable<Earning> Rendimentos { get; set; }
   public string ApplicationUserId { get; set; }
}

10-07 18:03