2011-11-11 21 views
1

データベーステーブルはこのようなフィールドがあります。ASP .NET MVC動的列名?

fld_column1 
fld_column1_item_1 
fld_column1_item_2 
fld_column1_item_3 
fld_column2 
fld_column2_item_1 
fld_column2_item_2 
fld_column2_item_3 
fld_column3 
fld_column3_item_1 
fld_column3_item_2 
fld_column3_item_3 

を、私はコントローラでこれをやった:

ViewBag.Columns = from col in _db.tbl_columns 
     select col; 
     return View(); 

私はこれをしなかったビューで:

<% foreach (tbl_columns col in (IEnumerable)ViewBag.Columns) 
    { %> 

     <%= col.fld_column1_item1 %> 
     <%= col.fld_column2_item1 %> 
     <%= col.fld_column3_item1 %> 

    <% } %> 

今私のqyestionです非常に簡単です:この "column1"、 "column2"などを自動化する変数を追加することは可能ですか?そして私はそれをどうすれば使うことができますか?

+0

これらの列が実際に保持している内容(例:名前が何であるかなど)を明示することができますか。 –

+2

コレクションをビューに表示するには、実際にはビュー・バッグではなくモデルを使用する必要があります。 – Chris

+0

@ GeorgeStockerの列名は、私が上に掲示したのと同じで、メニュー名を保持しています。 クリス私はあなたに合っているかどうかわからない。非常に短いサンプルを投稿してください。 :) –

答えて

1

テーブルスキーマを変更する可能性があるようですが、その時点では非常に簡単です。

新しいテーブルスキーマ:今すぐ

Id Column Item ParentId 
1 1  null null 
2 1  1  1 
3 1  2  1 
3 1  3  1 
4 2  null null 
5 2  1  4 
6 2  2  4 
6 2  3  4 
7 3  null null 
8 3  1  7 
9 3  2  7 
9 3  3  7 

、あなただけの、次の(擬似っぽいコード)によって、それらのそれぞれを反復処理することができます

foreach (var rows in columns) 
{ 
    foreach (var row in rows) 
    { 
     <%= row.Item %> 
    } 
} 
+0

というように、このプロジェクトのテーブルスキーマが作成されているので、残りのプロジェクトを行う必要があります:)しかし、私はそれもすべきだと思いますあなたが言及したように、私はこれについて議論し、決定しなければなりません。助けてくれてありがとう! –

0

私は他の人と同意し、あなたがする必要がありますビューモデルを使用します。ただし、現在のテーブル構造では、モデルを繰り返し処理し、各プロパティを表示する必要があります。 dbスキーマを変更する能力があれば、George Stockerの示唆するように、私はそれを平坦化します。