2009-08-06 18 views
3

好吧,我仍然得到了asp.net和MVC框架的竅門,並將我的知識從經典的ASP和VB轉換而來 - 所以請要溫柔。我有我的第一個視圖(/ home/details/X)運行良好thanks to previous help pointing me in the right direction,現在我需要從多個表和查詢/視圖添加數據到MVC視圖(我討厭SQL和MVC都使用單詞視圖爲不同的含義)。ASP.NET MVC C#:將來自多個表/查詢的數據引入視圖

我不是在找人爲我寫答案(除非他們真的精力充沛),更多的是讓別人指出我應該看到的正確方向並閱讀理解它並自己做這件事。

我的問題

有我需要在此視圖中顯示多個數據集,並且每個不同的數據集具有/ FK 1-M的關係建立了適當的PK,並且將所得的記錄將需要循環通過。

我怎麼會做這種以前

在我傳統的ASP天,我就剛纔定義頁面的頭部SQL查詢數據的位置使用,用select語句一起的線路:

SELECT * FROM query_name 
WHERE query_uniquecolumnname = Request.QueryString("value") 

這項工作完成,你會設置做而不是QUERY_NAME BOF/EOF起來,然後在您從查詢想要的字段名下降,這是所有做。

現在該如何實現?

因此,從我的經典ASP知識快速轉發,我如何獲得與MVC相同的結果?我想要使​​用的表/視圖已經在我的數據模型中定義了(並且關係在那裏顯示,我認爲這是一個加號),我只需要弄清楚如何在頁面,並使用「詳細信息」視圖中顯示的記錄的ID來確保僅顯示相關數據。

在此先感謝

回答

8

您正在尋找的概念被稱爲ViewModel。本質上,這是一個自定義類,它包含將在視圖中使用的所有數據。所以它負責合併來自不同表格的所有數據並將其作爲屬性公開。如果您使用的是數據訪問層,這通常與將幾個實體組合在一起一樣簡單。如果您使用原始SQL來執行此操作,那麼您將在訪問屬性時執行查詢。

那麼您將您的瀏覽繼承視圖模型,就像這樣:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.MyViewModel>" %> 

現在,在您看來,您可以訪問對象的所有不同的屬性簡單地寫之類的語句:

<%= Html.TextBox("MyProperty", Model.MyProperty) %> 

要從您的控制器構建您的視圖,請創建您的類的一個新實例(MyViewModel),將它傳遞給您需要的詳細信息記錄的ID,並且類中的邏輯將負責獲取正確的數據。然後像平常一樣從你的控制器返回你的視圖。

var myDetailsModel = new MyViewModel(detailsID); 
    return View(myDetailsModel); 
+0

可不可以給構建模型的原始SQL方式的例子嗎? – 2009-09-01 23:01:38

0

當我需要在網頁上顯示多個這樣的東西時,我通常使用RenderAction來執行此操作。

RenderAction允許您使用專用於該視圖的特定部分(子視圖,實際上)的控制器方法,因此您可以將強類型數據的單個數據集傳遞到該「子視圖」。

RenderAction位於Microsoft.Web.Mvc(「futures」)程序集中。

如果你是新手,我很抱歉;這有點出血,但你仍然需要知道它。請務必首先查看NerdDinner教程。

http://www.andreas-schlapsi.com/2008/11/01/renderaction-and-subcontrollers-in-aspnet-mvc/

http://davidhayden.com/blog/dave/archive/2009/04/04/...