2016-09-07 56 views
0

上週我意識到我的視圖模型正在填充記錄列表,當我真正想要的是從我的視圖中選擇記錄的單個記錄。我推斷這是我的視圖模型是錯誤的,但我似乎無法聯繫我的大腦如何改變它,所以它只是吐出所選記錄而不是數據庫中的記錄列表。MVC查看模型抓取單條記錄不是記錄列表,重寫

public class SummaryVM : BaseViewModel 
{ 
    public IList<RecordVM> Records { get; set; } 
    public SummaryVM() 
    { 
     this.Records = new List<RecordVM>(); 
    } 
} 

我在猜測我在想着它,就像我做的一切。

編輯:

新視圖模型

public class SummaryVM : BaseViewModel 
    { 
    public RecordVM Record { get; set; } 
} 

我的控制器

public ActionResult Summary(int id) 
    { 
     var vm = new SummaryVM 
     { 
      Record = new RecordVM() 
     }; 

     return View(vm); 
    } 
+0

另外,這行'if(id == vm.Record.Id)'沒有意義! 'vm.Record.Id'的值將會是0(除非你有一個自定義的get返回一些int。不知道你用這條線做什麼! – Shyju

回答

0

改變集合到單一實例?

public class SummaryVM : BaseViewModel 
{ 
    public RecordVM Record { get; set; } 
} 

現在,你必須確保隨時隨地可以使用這個視圖模型,你的代碼更新爲把它作爲一個單一的對象,而不是集合(沒有foreach循環等因素對Record財產

請注意,我們沒有將Record屬性初始化爲Record實例的構造函數。所以,你需要明確地做記錄類型訪問任何屬性之前

var vm= new SummaryVM { Record = new RecordVM() }; 
vm.RecordId = 123; 

訪問任何的它的屬性,以防止「對象引用未設置爲一個實例」錯誤之前的記錄性能做一個null

@model SummaryVM 
<h2>Record</h2> 
@if(Model.Record!=null) 
{ 
    <h3>@Model.Record.RecordI</h3> 
} 
+0

非常感謝你!我知道我已經結束了想到這一點,我不得不重寫我的控制器,但現在我的var虛擬機正在生成一個null,在Debug上它說它拋出了一個NullReferenceException。 – BlowFish

+0

你在哪裏得到'null'?在我的答案示例中,我將它初始化爲'新的SummaryVm {Record = new RecordVm()};' – Shyju

+0

我將我的控制器添加到我的問題 – BlowFish