【问题标题】:Displaying Select Rows from Multiple SQL Tables in an MVC Project在 MVC 项目中显示从多个 SQL 表中选择的行
【发布时间】:2015-07-30 01:45:44
【问题描述】:

我有一个 MVC 程序,它将数据从 .csv 文件上传到 SQL 数据库。我现在正在尝试显示使用 WebGrid 表上传的数据。我看到的所有示例都演示了一次只显示一个完整的表格。

我是使用 MVC 和 WebGrid 的新手,所以首先我想知道这是否是解决这个问题的正确方法,其次,如果这种方法是最好的方法,我将如何设置视图以显示来自 3 个不同表的数据。它是否需要 3 个不同的控制器和 3 个不同的视图,我是否必须拥有多个数据模型?任何输入将不胜感激。

【问题讨论】:

    标签: sql-server asp.net-mvc webgrid


    【解决方案1】:

    以下是一些 MVC 最佳实践:

    您的视图模型应该是您希望在视图上显示的内容
    这似乎很明显,但起初并非如此。从创建您的视图模型开始,当您这样做时,假设您对数据存储一无所知

    您的视图模型不应该知道/关心您的数据是如何存储的
    视图的工作只是显示一些数据,仅此而已。你的视图模型应该是这样的:

    public class ViewModel123 {
       public int ID {get;set;}
       public string foo {get;set;}//this may come from table A or table B, it does not matter
       public string bar {get;set;}//this may come from table A or table B, it does not matter
    }
    

    创建数据访问层

    这是从 N 个表中从数据库中获取数据的层。假设您使用的是 EF 或 linq-to-sql,获取数据的方法如下所示:

    public IEnumerable<ViewModel123> GetData() {
       return DatabaseHande.SomeThing.Select(x=> new ViewModel123 {
       ID = x.id,
       Foo = x.Foo,
       Bar = x.LinkTable.Bar
    });
    }
    

    让您的控制器调用您的数据访问层并返回视图模型

    您的控制器现在可以调用数据访问层并将视图模型返回给视图。更多伪代码:

    public ActionResult List() {
       var viewModelDataRows = _dataAccessClass.GetData();
       return View(viewModelDataRows);
    }
    

    【讨论】:

    • 谢谢,有道理。最后一件事,在制作视图时,我不需要“@using 模型语句”,对吗?
    • 在视图顶部,您将拥有 @model IEnumerable
    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2013-02-24
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多