asp.net复杂模型单视图

时间:2017-04-06 13:45:51

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

DatabaseModel

我有上面的数据库模型:

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

我正在尝试创建一种“over view”的方法,这样我就可以在一个页面上创建Report_Main的所有需求,而不必为Report_Main创建一个视图,然后将用户指向另一个页面。输入Report_Peramiter_Fields等。

我已经查看了View Models,但我无法理解它,我得到了“索引”和“细节”视图,将数据拉回来。它更适用于创建和编辑模型。

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

1 个答案:

答案 0 :(得分:1)

ViewModels是一种在视图中表示数据的方式,您需要在模型中显示信息,请查看此问题以了解它们的含义: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>
}
相关问题