Home > Software engineering >  How to properly display a list in a table?
How to properly display a list in a table?

Time:09-17

Please tell me if I set this up wrong:

Model:

public List<double> Balance { get; set; } = new List<double>();

public List<double> MonthlyPrincipal { get; set; } = new List<double>();
    
public List<double> MonthlyInterest { get; set; } = new List<double>();

public List<double> AccumulativeInterest { get; set; } = new List<double>();

Controller:

for (int i = 0; i <= T; i  )
{
    //math                
    double interest = balance * (R / 1200);
    double principalPayment = monthlyPayment - interest;                       
    double interestTotal = (balance   interest) - balance;
    balance = balance - principalPayment; 
    cumulative = cumulative   interest;                     

    //Pushing math to arrays.
    balanceArray.Add(balance);
    interestArray.Add(interestTotal);
    principalpaymentArray.Add(principalPayment);
    cumulativeArray.Add(cumulative);
}
model.MonthlyPrincipal = principalpaymentArray;
model.Balance = balanceArray;
model.MonthlyInterest = interestArray;
model.AccumulativeInterest = cumulativeArray;

View:

<tbody>
    @for (var i = 1; i <= Model.Term; i  )
    {
        <tr>
            <td>@i</td>
            <td> @Html.DisplayFor(model => model.Payment)</td>
            <td>@Html.DisplayFor(model => model.MonthlyPrincipal)</td>
            <td>@Html.DisplayFor(model => model.MonthlyInterest)</td>
            <td>@Html.DisplayFor(model => model.AccumulativeInterest)</td>
            <td>@Html.DisplayFor(model => model.Balance)</td>
        </tr>
    }
</tbody>

Now what this is doing is printing every item in the array in the table columns. How do correct this?

CodePudding user response:

This is the model you should be having. One for the loan payment transaction. The other one is the view model to display the result as shown

public class LoanPaymentVM
    {
        public decimal BFBalance { get; set; }
        public List<LoadPayment>? LoadPayments { get; set; }

        public LoanPaymentVM()
        {
            BFBalance = 0;
            LoadPayments = new List<LoadPayment>();
        }
    }

    public class LoadPayment
    {
            public DateTime PaymentDate { get; set; }
            public decimal PayAmt { get; set; }
            public decimal Interest { get; set; }
       
    }

Your controller should be very simple. Just put in the loan payment amount and interest will do. The calculation can be done one the view. Well you may pre-calculate the balance here though but that's all up to you.

public ActionResult LoanPayment() {

            LoanPaymentVM _lvm = new LoanPaymentVM();

            //Mock data for result

            _lvm.BFBalance = 10000;
            _lvm.LoadPayments.Add(
              new LoadPayment { PaymentDate = DateTime.Today.AddMonths(-2), PayAmt = 1000, Interest = 50 }
              );

            _lvm.LoadPayments.Add(
                new LoadPayment { PaymentDate = DateTime.Today.AddMonths(-1), PayAmt = 1000, Interest = 50 }
                );
            _lvm.LoadPayments.Add(
              new LoadPayment { PaymentDate = DateTime.Today.AddMonths(1), PayAmt = 1000, Interest = 50 }
              );
            // Mock data completed



            return View(_lvm);
        }

And here comes the View. For the variable Balance and AccInterest I defined, you may have to add @ depending what version of VS you are using.

there goes the view

@{
    decimal AccInterest = 0;
    decimal Balance = 0;
}

@{Balance = Model.BFBalance;}

<table >

    <tr>
        <th>Date</th>
        <th>Payment</th>
        <th>Interest</th>
        <th>AccInterest</th>
        <th>Balance</th>
    </tr>

    <tr>
        <td colspan="4">Opening Balance</td>
        <td>@Model.BFBalance</td>
    </tr>
   
    @foreach (var item in Model.LoadPayments)
    {
        AccInterest = AccInterest   item.Interest;
        Balance = Balance - (item.PayAmt - item.Interest);

        <tr>
            <td>@item.PaymentDate.ToLongDateString()</td>
            <td>@item.PayAmt</td>
            <td>@item.Interest</td>
            <td>@AccInterest</td>
            <td>@Balance</td>
        </tr>
  • Related