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

Asp.net mvc Mvc 3:在模型中使用计算字段并在视图中显示计算字段,asp.net-mvc,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; } } 其他金额将是一

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

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);
IEnumerable模型=\u myInvoiceService.GetInvoice()
返回视图(模型);

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

为此创建一个二级类,在该类中可以计算您喜欢的任何值:

public class InvoiceViewModel
{
    public MyInvoice Invoice { get; set; }
    public double SomeComputedAmount { 
    get { 
         return Invoice.SomeValue + Invoice.OtherValue; 
    }
    public List<InvoiceLineItem> LineItems { get; set; }
}
公共类InvoiceViewModel
{
公共MyInvoice发票{get;set;}
公共双倍计算金额{
获取{
返回Invoice.SomeValue+Invoice.OtherValue;
}
公共列表行项目{get;set;}
}
并在操作方法中更改代码以匹配以下内容:

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

return view(model);
列表模型=null;
foreach(在_myInvoicesService.GetInvoice()中的var发票)
{
添加(新发票视图模型{Invoice=Invoice};
//等等。。。
}
返回视图(模型);

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

您通常不会使用模型进入视图,而是使用ViewModel

为此创建一个二级类,在该类中可以计算您喜欢的任何值:

public class InvoiceViewModel
{
    public MyInvoice Invoice { get; set; }
    public double SomeComputedAmount { 
    get { 
         return Invoice.SomeValue + Invoice.OtherValue; 
    }
    public List<InvoiceLineItem> LineItems { get; set; }
}
公共类InvoiceViewModel
{
公共MyInvoice发票{get;set;}
公共双倍计算金额{
获取{
返回Invoice.SomeValue+Invoice.OtherValue;
}
公共列表行项目{get;set;}
}
并在操作方法中更改代码以匹配以下内容:

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

return view(model);
列表模型=null;
foreach(在_myInvoicesService.GetInvoice()中的var发票)
{
添加(新发票视图模型{Invoice=Invoice};
//等等。。。
}
返回视图(模型);

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

正确的方法是创建一个
ViewModel

public class MyViewModel
{
    public List<MyInvoice> MyInvoices {get; set;}
    public double OtherAmount {get; set;}
    public double TotalDue {get; set;}
}
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);

正确的方法是创建一个
ViewModel

public class MyViewModel
{
    public List<MyInvoice> MyInvoices {get; set;}
    public double OtherAmount {get; set;}
    public double TotalDue {get; set;}
}
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);