MVC ViewData如何工作?

时间:2010-06-03 13:47:17

标签: asp.net-mvc

我正在玩一个MVC应用程序,只是为了学习这项技术。我正在嘲笑一个支票登记应用程序,它跟踪一个支票账户,什么清算银行和什么没有。我使用EF作为我的模型,在编辑,创建等方面,一切似乎都正常工作。但是,我在顶部有几个总计。一个显示银行的余额,另一个显示实际余额。它大部分时间都可以工作,但是当我编辑时,它并不总是准确地反映出新的总数,而且每次进行更改时我都需要更新(即当某些东西清除了银行时):

[Authorize(Roles = "admin, checkUser")]
public ActionResult Index()
{
    var resultSet = from myChecking in chk.tblCheckings
                    orderby myChecking.id descending
                    select myChecking;

    ViewData.Model = resultSet.Take(45).ToList();

    //for balances
    var actualBalance = from theChecking in chk.tblCheckings
                    select theChecking.deposit - theChecking.withdrawal;

    var bankBalance = from theChecking in chk.tblCheckings
                      where theChecking.cleared == true
                      select theChecking.deposit - theChecking.withdrawal;

    //get bank balance
    ViewData["bankBalance"] = bankBalance.Sum();


    //get actual balance
    ViewData["actualBalance"] = actualBalance.Sum();

    return View();
}

我在索引视图中显示实际和其他余额,如下所示:

<td colspan="9" style="text-align: center; font-size: 11pt; color: white;">
  <%= string.Format("Bank Balance: {0:c}", ViewData["bankBalance"]) %>  ------
  <%= string.Format("Actual Balance: {0:c}", ViewData["actualBalance"]) %>
</td>

1 个答案:

答案 0 :(得分:7)

你错过了MVC的一部分...... M。

您应该填充包含视图所需的所有数据项的模型。这就是你的控制器应该是什么样子。

[Authorize(Roles = "admin, checkUser")]
public ActionResult Index()
{
    IndexModel model = new IndexModel();

    var resultSet = from myChecking in chk.tblCheckings
                    orderby myChecking.id descending
                    select myChecking;

    model.Transactions = resultSet.Take(45).ToList();

    //for balances
    var bankBalance = from theChecking in chk.tblCheckings
                      where theChecking.cleared == true
                      select theChecking.deposit - theChecking.withdrawal;

    model.BankBalance = bankBalance.Sum();


    //get actual balance
    var actualBalance = from theChecking in chk.tblCheckings
                    select theChecking.deposit - theChecking.withdrawal;

    model.ActualBalance = actualBalance.Sum();

    return View(model);
}

然后您的视图将如下所示(注意,模型中的所有内容都是强类型的):

<td colspan="9" style="text-align: center; font-size: 11pt; color: white;">
  <%= string.Format("Bank Balance: {0:c}", Model.BankBalance) %>  ------
  <%= string.Format("Actual Balance: {0:c}", Model.ActualBalance) %>
</td>

您需要创建一个模型,它只是一个包含您想要的所有属性的类。