Mvc 3:在模型中使用计算字段并在视图中显示计算字段

时间:2013-08-22 12:58:48

标签: asp.net-mvc

我需要显示存储过程的结果并使其看起来像附加的图像。我知道我必须创建一个看起来像这样的模型

public class MyInvoice
{
    public DateTime invoiceDate { get; set; }
    public string invoiceNumber { get; set; }
    public double amount { get; set; }
    public double amountDue { get; set; }
}

其他金额将是一些字段的总和 总到期金额为其他金额和到期金额总和

我需要将一个模型传递给我的视图。如何在模型中包含计算字段? 我想访问我视图中的计算字段。 我是否只是根据我的模型添加其他金额和总金额?

我也知道我必须在我的动作结果方法中写出这样的东西,但不知道如何处理 其他金额和总金额,因为它们不是来自数据库。

IEnumerable<MyInvoice> model = _myInvoiceService.GetInvoice()
return view(model);

enter image description here

2 个答案:

答案 0 :(得分:3)

正确的方法是创建ViewModel

public class MyViewModel
{
    public List<MyInvoice> MyInvoices {get; set;}
    public double OtherAmount {get; set;}
    public double TotalDue {get; set;}
}

然后将Invoices映射到ViewModel

IEnumerable<MyInvoice> model = _myInvoiceService.GetInvoice();
var myViewModel = new MyViewModel();
myViewModel.MyInvoices = model;
myViewModel.OtherAmount = //whatever you want here;
myViewModel.TotalDue = //total due here
return View(myViewModel);

答案 1 :(得分:0)

您通常不会使用模型查看视图,而是使用ViewModel。

为此创建一个辅助类,您可以在其中计算您喜欢的任何值:

public class InvoiceViewModel
{
    public MyInvoice Invoice { get; set; }
    public double SomeComputedAmount { 
    get { 
         return Invoice.SomeValue + Invoice.OtherValue; 
    }
    public List<InvoiceLineItem> LineItems { get; set; }
}

更改代码以符合操作方法中的以下内容:

List<InvoiceViewModel> model = null;
foreach(var invoice in _myInvoiceService.GetInvoice())
{
  model.Add(new InvoiceViewModel { Invoice = invoice };
  // etc...
}

return view(model);

最后,让您的视图接受InvooViewModel的IEnumerable。