簡體   English   中英

ASP.NET MVC C#:將來自多個表/查詢的數據引入視圖

[英]ASP.NET MVC C#: Bringing in data from multiple tables/queries into a view

好的,我仍然掌握asp.net和MVC框架,並將我的知識從經典的ASP和VB轉換過來-所以請保持溫柔。

由於先前的幫助將我指向正確的方向 ,因此我的第一個視圖(/ home / details / X)運行良好,現在我需要將多個表和查詢/視圖中的數據添加到MVC視圖中(我討厭SQL和MVC都使用單詞view表示不同的含義)。

我不是在尋找別人為我寫答案的人(除非他們覺得自己真的很精力充沛),更何況是有人將我指向我應該看的正確方向,並繼續閱讀以理解並執行這個我自己。

我的問題

我需要在此視圖中顯示多個數據集,並且每個不同的數據集都建立了正確的PK / FK 1-M關系,並且需要循環瀏覽所得的記錄。

我以前是怎么做到的

在我經典的ASP時代,我會在要使用數據的頁面頂部定義SQL查詢,並使用select語句,如下所示:

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

完成此操作后,您可以將query_name NOT BOF / EOF設置為while,然后放入您要從該查詢中獲取的字段名稱,此操作就完成了。

我現在該如何實現?

因此,根據我的經典ASP知識快速轉發,我如何使用MVC達到相同的結果?

我希望使用的表/視圖已經在我的數據模型中定義了(並且關系在其中顯示,我認為這是一個加號),我只需要弄清楚如何在頁面中調用這些表/視圖並使用在“詳細信息”視圖中顯示的記錄的ID,以確保僅顯示相關數據。

提前致謝

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

然后,使View從ViewModel繼承,如下所示:

<%@ 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);

我建議閱讀有關ASP.NET MVC的入門知識

http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx

它涵蓋了啟動和運行所需的大多數基本方案。

但是,如果要將多個結果集合並為一個,然后將其作為視圖返回,則應創建一個自定義對象,並將結果集映射到它,然后可以在視圖中綁定到您的自定義對象。

當我需要在網頁上顯示多個類似內容時,通常使用RenderAction來完成。

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

RenderAction在Microsoft.Web.Mvc(“期貨”)程序集中。

如果您是這方面的新手,我深表歉意。 這有點前沿,但是無論如何您都需要知道它。 請務必先查看NerdDinner教程。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM