【问题标题】:asp.net Complex models Single Viewasp.net 复杂模型 单一视图
【发布时间】:2017-04-06 13:45:51
【问题描述】:

我有上面的数据库模型:

  • PD:预定义(用户有一个选项列表可供选择)
  • UA:用户添加(用户可以为此创建新条目)
  • SA:系统添加(保存所有内容时在控制器中生成)

我正在想办法创建一个“概览”,这样我就可以在一个页面上创建 Report_Main 的所有要求,而不必为 Report_Main 创建一个视图,然后将用户引导到另一个页面输入 Report_Permiter_Fields 等。

我已经查看了视图模型,但我无法完全理解它,我将它用于“索引”和“详细信息”视图来拉回数据。它更多地用于创建和编辑模型。

Database: Sql Server
Data Mapping: Entity Framework
View Engine: razor

【问题讨论】:

  • 你的底层数据层由什么组成?你在使用实体框架吗?休眠?请提供更多细节。
  • 抱歉,我目前正在使用 Entity Framework 和 Sql server

标签: c# asp.net sql-server asp.net-mvc entity-framework


【解决方案1】:

ViewModels 是一种在 View 上表示数据的方式,您需要在其中显示来自 Models 的信息,请查看此问题以了解它们是什么:What is ViewModel in MVC?

在您的情况下,您可以创建一个简单的 ViewModel 来表示您需要在 Report_Main 上显示的数据,这可以通过以下方式轻松实现:

namespace MyProject 
{
    public class MyViewModel
    {
        public int ID { get; set; }
        public System_Tracking Tracking { get; set; }
        public Report_Login_Credentials Credentials { get; set; }
        public Report_Type Type { get; set; }
        public List<Report_Peramiter_Fields> Fields { get; set; }
        public string Name { get; set; }
        public string Location { get; set; }
    }
}

它可能只是看起来像一个简单的模型,因为它只是一个视图使用,并且没有持久化。这就是模型和视图模型之间的区别。

从此您只需要一页,例如MyPage.cshtml,您可以在其中使用此模型,例如:

@model MyProject.MyViewModel

@{
    ViewBag.Title = "MyPage";
}

@* your content here *@

@Model.ID <br>
@Model.Report_Type.Description 

// Etc.

要传递此信息,您需要在控制器中进行,例如:

namespace MyProject
{
    public class MyController : Controller
    {
        public ActionResult MyPage(int? Id)
        {

            var data = context.Report_Main.Find(Id); // Or whatever

            var vm = new MyViewModel(){
                Tracking = data.System_Tracking,
                // ... populate the viewmodel here from the data received
            };

            return View(vm); 
        }
    }
}

简而言之,ViewModels 允许您将所有数据绑定在一个模型中,并将其传递到可以静态表示它的视图上,当您不想直接表示或从用户那里获取数据时,您也可以使用它。访问模型。

编辑:您可以使用 C# 遍历 Razor 中的模型列表:

foreach(var item in Model.Fields)
{
    <p>item.Peramiter</p>
}

【讨论】:

  • 感谢您对查看模型的大力鼓励!我将如何处理 Report_Peramiters 方面的事情,因为那是一个对象列表?
  • @Houlahan 我已经编辑了答案,以展示如何在 Razor 中迭代结果。但是在我看来,Report_Main_Export_TypeReport_Peramiter_FieldsReport_Export_Type 之间的中间链接表。在您的模型中,您实际上需要类似:List&lt;Report_Main_Export_Fields&gt; 但我不能肯定地说,因为您的表格在没有上下文的情况下看起来很混乱。
  • 我了解如何在列表中显示项目以及在创建或编辑时将新项目添加到列表中。 Report_Export_Type 只是文件格式 excel、csv、pdf 的列表,因此特定报告可以具有导出到 csv 和 pdf 的选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多