ASP.NET MVC - 一次从2个模型列出的ViewModel

时间:2017-07-06 14:32:49

标签: c# asp.net-mvc

我有一个场景,用户将提交一个表单,其中包含2个模型(数据库表)的信息:用户和请求。数据还需要一起列出由UserID加入,即列出所有用户或特定用户发出的所有请求。所以我还需要从两个表中输出数据。

我的解决方案是创建名为UserRequests的ViewModel,它将包含这两个模型,但是我仍然坚持实现。我不确定它是否应该如下所示:

public class UserRequestModel {
    public User User1 { get; set; }
    public Request Request1 { get; set; }

总而言之,Controller中的Index()函数将执行的操作是获取所有用户的请求查询,并列出两个表中的所有字段(已连接)。因此,我需要以某种方式将该查询中的数据导入ViewModel以输出它,并且不知道如何设置ViewModel以便这样做。任何见解将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用linq连接两个表,然后将记录投影到目标视图模型,如下所示:

  var res = 
    from u in Users
    join r in Requests on u.UserId equals r.UserId 
    select new UserRequestModel { User1 = u,  Request1 = r}; 

您是否正在使用ORM(例如实体框架)来映射数据库表?

答案 1 :(得分:0)

ViewModel应该旨在帮助您显示数据。我建议你遵循每个View的规则1 ViewModel。 您应该首先清楚地设计出如何在视图中表示数据。我不确定您的ViewModel是否正是您要表示的内容。您想显示1个请求和所有用户相关吗?或者你想要1个用户和所有相关的请求?或者您想要与许多用户相关的许多请求?

根据您的需要,您应该创建ViewModel。想象一下,你想要1个用户和多个请求,那么我会在用户类中找到一个请求列表。

答案 2 :(得分:0)

我唯一能想到的就是你会得到一个用户和一个请求,在你的帖子接缝中你会得到不止一个。

我会根据你喜欢的内容将属性更改为Lists,IEnumerables或Arrays,然后当你从数据库中获取帖子时,创建ToList(),ToArray()或类似的。

var Users = dbcontext.Users.Where(x => x.ex == example).ToList()

在获取数据时,您可以使用您喜欢的扩展方法。

Field1: Field1Text
Field2: Field2Text

Field3 (need to ignore)
Field4 (need to ignore)

Field5
Field5Text

// Cars - for example
#,Col1,Col2,Col3,Col4,Col5,Col6
#1,Col1Text,Col2Text,Col3Text,Col4Text,Col5Text,Col6Text
#2,Col1Text,Col2Text,Col3Text,Col4Text,Col5Text,Col6Text
#3,Col1Text,Col2Text,Col3Text,Col4Text,Col5Text,Col6Text