【问题标题】:ASP.NET MVC C#: Bringing in data from multiple tables/queries into a viewASP.NET MVC C#:将来自多个表/查询的数据引入视图
【发布时间】:2009-08-06 01:47:47
【问题描述】:

好的,我仍然在掌握 asp.net 和 MVC 框架的窍门,并将我的知识从经典的 ASP 和 VB 转换过来 - 所以请温柔一点。

我的第一个视图 (/home/details/X) 运行良好 thanks to previous help pointing me in the right direction,现在我需要将来自多个表和查询/视图的数据添加到 MVC 视图(我讨厌 SQL 和 MVC 都使用不同含义的单词视图)。

我不是在找人为我写答案(除非他们感觉非常有活力),更重要的是让有人指出我应该查看和阅读以理解的正确方向它自己做。

我的问题

我需要在此视图中显示多个数据集,并且每个不同的数据集都建立了适当的 PK/FK 1-M 关系,并且需要循环生成的记录。

我以前会怎么做

在我经典的 ASP 日子里,我会在要使用数据的页面的开头定义 SQL 查询,并使用如下所示的 select 语句:

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

完成后,您需要设置 do while query_name NOT BOF/EOF,然后从该查询中放入您想要的字段名称,这一切都完成了。

我现在该如何实现?

那么,从我的经典 ASP 知识快速转发,我如何使用 MVC 获得相同的结果?

我希望使用的表/视图已经在我的数据模型中定义(并且关系显示在其中,我认为这是一个加号),我只需要弄清楚如何在页面中调用它们并使用详细信息视图中显示的记录的 ID 来确保仅显示相关数据。

提前致谢

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller


    【解决方案1】:

    您正在寻找的概念称为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);
    

    【讨论】:

    • 您能否举一个构建模型的原始 SQL 方式的示例?
    【解决方案2】:

    我建议阅读这篇关于 ASP.NET MVC 的入门书

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

    它涵盖了启动和运行所需的大多数基本场景。

    但是,如果您想将多个结果集合并为一个,然后将其作为视图返回,您应该创建一个自定义对象,并将结果集映射到它,然后您可以在视图中绑定您的自定义对象。

    【讨论】:

      【解决方案3】:

      当我需要在网页上显示多个类似这样的内容时,我通常使用 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/...

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 2018-07-29
        • 1970-01-01
        • 2016-07-26
        • 1970-01-01
        • 1970-01-01
        • 2013-11-23
        • 2013-02-11
        相关资源
        最近更新 更多