2009-08-30 12 views

答えて

5

ViewDataに格納(シリアル化)することができれば、返すことができます。 ASP.NET MVCには、値や型を制約する「魔法」はありません。

ビュー内のDataTableを繰り返し処理する場合は、コントローラ内のViewDataに配置し、ビュー内で取得し、他の場所と同じように反復処理します。

DataTable is serializable

だから、次のような何かが動作するはずです:

<% 
var tbl = ViewData["MyDataTable"]; 

foreach (DataRow row in tbl.Rows) 
{ 
    foreach (DataColumn col in tbl.Columns) 
    { 
    Response.Write(row[col] as string ?? string.Empty); 
    } 
} 
%> 
+6

これは彼の質問に答えるのに適していますが、データベースからデータを取得するために使用されたテクノロジと密接に結びついているため、データテーブル(またはエンティティ)をビューに渡すことはお勧めしません。私の意見ではPOCOオブジェクトを使う方が良いです。 – 7wp

+1

MVCでViewStateという名前ではなく、ViewDataと呼ばれています。そして私はRobertoに同意します。コントローラから必要なデータを含むオブジェクトをビューに渡す必要があります。 DataTableだけを渡さないでください。 – BFree

+0

うん。私の一部にはタイプミス。そして私はRobertoに同意します。私は古い継承されたアプリケーションと戦ってきたし、Viewstateは私の心の上にあります。今すぐコード/コメントを修正する。 – andymeadows

2

私が正しくあなたの質問を理解していれば、あなたはMVCを使用しているという理由だけで、データベースと通信するために、エンティティフレームワークを使用する必要はありません。

コントローラ内には、データベースからデータを取得することを意味するものを使用できます。次に、そのデータをビューに渡すカスタムオブジェクトに変換するか、または単にDataTableをビューに渡すことができます。

あなたのビューは、渡すオブジェクトをどのように反復するかを知っているだけです。

ただし、POCOオブジェクトを使用してビューに渡すことをお勧めします。そのため、ビューデータとデータベースから情報を抽出するために使用されるテクノロジを強固に結合する必要はありません。

+0

このPOCOオブジェクトとは何ですか?プレーンな古いCLRオブジェクト? でも、データテーブルをPOCOオブジェクトにする方法がわかりました – Josh

+0

こんにちは。あなたは正しいPOCO = Plain Old CLRオブジェクトです。データベースをPOCOに "作る"必要はありません。 DataTableやEntity Frameworkなどのデータを取得する方法は自由です。しかし、データを取得した後、それを自分のPOCOオブジェクトに変換します。 POCOオブジェクトをデータの「ビークル」と考えてください。あなたのビューはこれに密接に結びついているので、ビュー全体を再コーディングせずにデータアクセスレイヤーを変更するのは難しくありません。 – 7wp

関連する問題