2010-06-03 27 views
3

我正在爲了學習這項技術而忙於使用MVC應用程序。我正在嘲笑一個支票註冊應用程序,該應用程序跟蹤支票賬戶,什麼已經清除了銀行,什麼沒有。我使用EF作爲我的模型,並且在編輯,創建等方面似乎都可以正常工作。但是,我在頂部有幾個總數。一個顯示銀行的餘額,另一個顯示實際餘額。它的工作原理大部分的時間,但是當我做編輯的它並不總是準確地反映新的總,我需要它來更新每次發生變化時(即當東西清除銀行):MVC ViewData是如何工作的?

[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> 

回答

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> 

您將需要創建一個模型,它僅僅是一個與所有屬性類你要。

+0

所以當我創建了ADO.NET實體模型,這是不同於這個單獨的模型,你說我需要創建? (對不起,接下來的教程) – Matt 2010-06-03 14:13:20

+0

模型應該只關注支持視圖 - 您可以在控制器中創建它。您可以使用ADO.NET實體模型來填充MVC模型中的某些字段 - 但這不是一回事。 – Fenton 2010-06-03 15:40:45