2015-05-13 35 views
1

我要显示在视图中的计算的字段,所以我试图创建这样一个视图模型:如何在ASP.NET MVC中使用视图模型来显示计算字段?

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Web;  

namespace Facturacion.Models 
{ 
    public class Test 
    { 
     public int testId { get; set; }  

     [Required] 
     public decimal price { get; set; } 
    }  

    public class TestViewModel 
    { 
     [Key] 
     public int testId { get; set; } 
     public Test test { get; set; } 
     public decimal price { get; set; } 
     public decimal calculated { get; set; }  

     public TestViewModel(Test test) 
     { 
      Test = test; 
      calculated = Test.price * 2; 
     } 
    } 
} 

它给了我一个错误,所以我改变了构造函数:

 public TestViewModel(Test test) 
     { 
      var foo = test; 
      calculated = foo.price * 2; 
     } 

但现在当我构建项目时,它会创建一个名为“TestViewModels”的表,因此我无法访问“测试”表中的数据。

我认为一个viewmodel不应该有一个id,但是如果它不支持,scaffolder不会生成控制器。

使用视图模型在视图中显示计算字段的正确方法是什么?

+1

您的视图模型不应该包含'Test test',所有的视图模型都需要一个无参数的构造函数,否则它们不会绑定在回发之后。你的视图模型也应该放在一个单独的文件夹中(比如说“ViewModels”)。在您的控制器方法中,您获取数据模型,初始化视图模型的新实例并将数据模型属性映射到该模型,然后将视图模型返回到视图。 –

+0

而_“它给了我一个错误”_ - 什么错误? –

+0

错误表示models.Test是一种类型,但它的使用方式类似于变量 –

回答

2

我可以解决这个问题,而无需使用视图模型

namespace Facturacion.Models 
{ 
    public class Test 
    { 
     public int testId { get; set; }  

     [Required] 
     public decimal price { get; set; } 

     public decimal calculated 
     { 
      get 
      { 
       return (decimal)(price*2); 
      } 
     } 
    } 
} 

公告计算的领域没有一套方法。

+1

您的模型是您的业务层的一部分,因此添加像您这样的属性是正确的方法,因为计算是业务逻辑,而不是UI。 – Andy

相关问题