2015-05-13 37 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

相關問題