2010-06-03 5 views
3

Я использую приложение MVC для изучения технологии. Я высмеиваю приложение регистра регистрации, которое отслеживает текущую учетную запись, то, что очистило банк, а что нет. Я использую EF для своей модели, и все, кажется, работает правильно, поскольку Edit, Create и т. Д. Однако у меня есть пара итогов наверху. Один, чтобы показать баланс банка, а другой - показать фактический баланс. Она работает большую часть времени, но когда я делаю Edit-х это не всегда точно отражает новую сумму, и мне нужно обновить каждый раз, когда вносятся изменения (то есть, когда что-то очищает банк):Как работает 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 ... Магическая

Вы должны заселять модель, которая содержит все элементы данных, необходимых вид. Это должен выглядеть ваш контроллер.

[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 Entity, которая отличалась от этой отдельной модели, которую вы говорите, мне нужно создать? (Извините, после урока) – Matt

+0

Модель должна учитывать только поддержку представления - вы создаете его в контроллере. Вы можете использовать свою модель сущности ADO.NET для заполнения некоторых полей вашей модели MVC, но это не одно и то же. – Fenton