2016-12-07 41 views
0

我目前正在使用Asp.Net MVC和C#開發應用程序。其中一個要求是檢查項目是什麼進程,然後只顯示適當的div。所以,我決定創建一個數據庫中的表,其包括:根據布爾值顯示在視圖中隱藏div

Id  ProcessDescription  DivOneVisible  DivTwoVisible 
1  Approved     True     False 
2  Analysis     True     True 
... 

注 - ID和ProcessDescription永遠不會改變

目前該表僅持有10行數據,但想法將來可以添加更多的行/列。

我然後繼續創建適當的方法,一個用於每個股利如下

public bool ShowDivOne(int id) 
{ 
    var data = uow.GetRepository<ItemProcess>().GetById(id); 
    bool showDivOne = data.DivOneVisible.HasValue ? data.DivOneVisible.Value : false; 

    if (showDivOne) 
     return true; 
    else 
     return false; 
} 

我使用相同的代碼作爲上述用於ShowdivTwo()方法,但是匹配不同的列中。然後在視圖中我做

@if(ShowDivOne){//div one code here} 
@if(ShowDivTwo){//div two code here} 

這工作,但我不知道是否有一個更通用的方法,我可以寫一個方法,將涵蓋即使添加了新的行或列的每個場景。

+0

你意識到你可以做'返回data.DivOneVisible.HasValue? data.DivOneVisible.Value:false;' –

+0

@StephenMuecke但我仍然需要爲每個div編寫方法 – Code

+0

我只是評論你的方法中的(無意義的)if if塊:) –

回答

0

你仍然需要有數據庫和視圖模型之間的映射某處最主要的。目前它在你的方法中被硬編碼。

你可以把它完全通用的,如果你開始使用反射,有一個映射數組屬性名稱。但我不會推薦這樣做,因爲它複雜而難以維護和改變。 (如果你想我可以進入細節的實施)。

對於你的例子,我會建議讓每個項目一個視圖模型,包含的div顯示的屬性。

public class ProcessViewModel 
{ 
    public int Id {get;set;} 
    public bool ShowDivOne {get;set;} 
    public bool ShowDivTwo {get;set;} 

    ProcessViewModel(){} 
    ProcessViewModel(ItemProcess data){ 
    Id = data.Id; 
    ShowDivOne = data.DivOneVisible.HasValue ? data.DivOneVisible.Value : false; 
    ShowDivTwo = data.DivTwoVisible.HasValue ? data.DivTwoVisible.Value : false; 
    } 
} 

你還是詢問每個項目單獨或一起對它們進行查詢和數據傳遞到視圖模型來構建它。

並在視圖上一個簡單的foreach通過的ViewModels列表遍歷。

擴展以包含更多的性能會很容易和兩岸向前,用最少的代碼維護。