2009-08-30 56 views

回答

5

如果可以將其存儲(序列化)到ViewData中,您可以返回任何想要的結果。關於ASP.NET MVC沒有什麼「魔術」限制了值和/或類型。

如果你想遍歷視圖中的DataTable,把它放在控制器的ViewData中,在View中檢索它,並像在其他任何地方一樣遍歷它。

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

這很適合回答他的問題,但我不建議將DataTables(或實體)傳遞給視圖,因爲它將視圖與用於從數據庫中獲取數據的技術緊密結合在一起。在我看來,使用POCO對象更好。 – 7wp 2009-08-30 14:35:42

+1

它在MVC中不叫ViewState,它叫做ViewData。我同意Roberto的觀點,您應該將包含您需要的數據的對象傳遞給您的視圖。不要只傳遞一個DataTable。 – BFree 2009-08-30 15:56:28

+0

是的。在我的部分錯別字。我同意羅伯託。我一直在與一個更舊的繼承應用程序戰鬥,Viewstate在我心中。現在修復代碼/評論。 – andymeadows 2009-08-30 22:27:36

2

如果我正確理解你的問題,只是因爲你使用MVC,你不必使用實體框架與數據庫進行通信。

在控制器內部,您可以使用任何方法從數據庫中獲取數據。然後,您可以將該數據轉換爲傳遞給View的自定義對象,也可以將DataTable傳遞給您的視圖。

你的觀點只是要知道如何遍歷你傳遞給它的對象。但是,我建議使用POCO對象傳遞給您的視圖,以便您不會將視圖數據與用於從數據庫中提取信息的技術緊密結合。

+0

這是什麼POCO對象?簡單的舊CLR對象? 好的,但我不知道如何使數據表成爲POCO對象 – Josh 2009-08-30 14:49:09

+0

Hi Johsh。你是對的POCO =普通的舊CLR對象。您不需要將數據庫「製作」爲POCO。您可以使用任何方式來獲取您的數據,如DataTable,甚至實體框架。但是在獲取數據之後,您可以將其轉換爲您自己的POCO對象。將您的POCO對象視爲數據的「載體」。然後,您的視圖可以與此緊密結合,因此在不重新編碼大量視圖的情況下更改數據訪問層並不難。 – 7wp 2009-08-30 21:26:06