繁体   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