2016-12-07 8 views
0

現在、Asp.Net MVCとC#を使用しているアプリケーションで作業しています。要件の1つは、アイテムがどのプロセスであるかを確認し、適切なdivのみを表示することです。だから私は、で構成されてDBにテーブルを作成することを決めました:Showブール値に基づいてビュー内のdivを非表示にする

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

NOTE - 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()方法は、上記のように同じコードを使用するが、異なる列に一致する。先に行くと適切な方法は、各事業部に1つずつ作成次にビューで、私はこの作品

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

んが、私は新しい列または行が追加されている場合でも、それぞれのシナリオをカバーする一つの方法を書くことができ、より汎用的な方法がある場合、私は思っていました。

+0

あなたは 'return data.DivOneVisible.HasValue? data.DivOneVisible.Value:false; ' –

+0

@StephenMueckeしかし、各divのメソッドを書く必要があります – Code

+0

メソッドの(無意味な)' if'ブロックにコメントしています:) –

答えて

0

データベースとViewModelの間のマッピングをまだ必要としている主な点は、現時点ではあなたの方法ではコード化されていません。

リフレクションの使用を開始し、プロパティ名を持つマッピング配列を使用すると、絶対に汎用にすることができます。しかし、私はそれを合併症以上にして維持したり変えたりすることを勧めません。 (必要な場合は、実装の詳細に行くことができます)。

たとえば、表示する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のリストを横断するビューです。

これ以上のプロパティを含めるように拡張すると、維持するための最小限のコードで、非常に簡単で厄介です。

関連する問題