从多个模型传递多个列表以从控制器

时间:2016-04-27 14:26:34

标签: c# asp.net-mvc-4

我尝试找到类似的问题,但没有一个与我的情景相符。所以我发布这是一个新问题。我的模型和控制器如下所示:

型号:

public class table1
{
     public string name1 { get; set; }
}

public class table2
{
     public string name2 { get; set; }
}

public class bothTable
{
     public table1 table1 { get; set; }
     public table2 table2 { get; set; }
}

控制器:

List<table1> list1 = //generate list from table1
List<table2> list2 = //generate list from table2

var model = ?

return View(model);

我只需要一种方法将输出列表传递给模型,这样我就可以将它传递给View。显然我在table1和table2中都有多个属性,而list1和list2是从LINQ生成的,所以它们有多个结果。

任何人都可以帮助我了解我的模型应该是什么样的,以便我可以将两个列表传递给我的视图吗?

我正在引用此链接,但它与我的方案完全不符: http://forums.asp.net/t/1998033.aspx?Passing+multiple+Models+to+View+from+Controller

我还在stackoverflow中提到了其他类似的问题,但我无法得到理想的结果。

3 个答案:

答案 0 :(得分:8)

您应该创建一个ViewModel,其中包含视图中所需的所有信息。

public class MyViewModel {
   public List<table1> TheFirstTable {get;set;}
   public List<table2> TheSecondTable {get;set;}
}

你可以像这样填写

MyViewModel viewModel = new MyViewModel();
viewModel.TheFirstTable = //first table content
viewModel.TheSecondTable = //second table content
return View(viewmodel);

在视图中,您可以从模型中检索信息,如

Model.TheFirstTable

或在foreach循环中使用它

@foreach(var row in Model.TheFirstTable) {
    //do something with the row
}

答案 1 :(得分:2)

bothTable的模型更改为List<table1> List<table2>。例如:

public class table1
{
     public string name1 { get; set; }
}

public class table2
{
     public string name2 { get; set; }
}

public class bothTable
{
     public List<table1> table1 { get; set; }
     public List<table2> table2 { get; set; }
}

然后,生成您的模型:

List<table1> list1 = //generate list from table1
List<table2> list2 = //generate list from table2

var model = new bothTable { table1 = list1, table2 = list2 };

return View(model);

答案 2 :(得分:0)

正确的包装程序使之起作用

public class ListData
{
    public IEnumerable<EntityFrameworkModel1> List1 { get; set; }
    public IEnumerable<EntityFrameworkModel2> List2 { get; set; }
}

然后,控制器按如下所示将值传递到视图。

var dbtables = new OtherContext();
string userId = User.Identity.GetUserId().ToString();

ListData listdata = new ListData();
var list1 = dbtables.EntityFrameworkModel1.ToList()
            .Where(c => c.OwnerId == userId && c.Active == true)
            .OrderBy(c => c.DateAdded).Reverse();

ListData.List1 = list1;

..     返回View(listdata);

MVC 5.2 EntityFramework 6.0 VS 2017

然后可以将视图模型引用为。

@model App.Models.ListData

@foreach (var record in Model.List1)
{
    <div class="form-row">
        <div class="Info1">
            @record.Field1 [@record.Field2]
            @record.Field3
        </div>
        <hr />
    </div>
}