从使用ViewModel调用的表中获取值

时间:2016-02-16 23:12:43

标签: c# asp.net-mvc

我想要做的是从我的付款表中获取值并进行汇总

但是在我的回报中,我得到了这个问题的回归View( model ); :

  

参数类型models.Payments不能分配给模型类型   'System.Collections.Generic.IEnumerable'

我收到此错误,因为我没有在我的视图中分配正确的模型

2 个答案:

答案 0 :(得分:1)

您的剃刀视图是对EarningsViewModel集合的强类型。但是从您的action方法中,您传递的是Payments类的单个对象。所以你得到这个错误!

理想情况下,您应该为此特定视图创建新的视图模型。

public class ClientPaymentInfo
{
  public string ClientName { set;get;}
  public List<PaymentInfoVm> Payments { set;get;}
  public ClientPaymentInfo()
  {
    Payments = new List<PaymentInfoVm>();
  }
}
public class PaymentInfoVm
{
  public int Id { set;get;}
  public string PaymentNumber { set;get;}
  public decimal Amount { set;get;}
}

现在您应该更新您的剃刀视图以强类型为该类型。

@model ClientPaymentInfo
<h2>Payments of @Model.ClientName</h2>
@foreach(var item in Model.Payments)
{
  <p>@item.Amount</p>
  <p>
    @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
    @Html.ActionLink("Details", "Details", new { id=item.Id }) |
    @Html.ActionLink("Delete", "Delete", new { id=item.Id })
  </p>

}
<p>Total : @Model.Payments.Sum(s=>S.Amount)

所以你的行动方法将是

public ActionResult Index(int id)
{
  var vm= new ClientPaymentInfo { ClientName = "Hard coded Client Name"};

  vm.Payments = db.PaymentsList.Where(x => x.ClientsId == id)
                .Select(d=>new PaymentInfoVm { 
                            Id=d.Id,
                            Amount=d.Amount, 
                            PaymentNumber=d.Paymentnumber}).ToList();
  return View(vm);

}

答案 1 :(得分:0)

您的问题是您要发送不同类型的模型,因此您的视图正在列出EarningsViewModel的列表:

@model IEnumerable<MyApp.Models.ViewModels.EarningsViewModel>

您正在传递Payments个对象。