【问题标题】:Pass multiple list from multiple models to view from controller从多个模型传递多个列表以从控制器查看
【发布时间】:2016-04-27 14:26:33
【问题描述】:

我尝试找到一个类似的问题,但没有一个与我的场景匹配。所以我把它作为一个新问题发布。我的模型和控制器如下所示:

型号:

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);

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

谁能帮我看看我的模型应该是什么样子,以便我可以将两个列表都传递给我的视图?

我指的是这个链接,但它与我的场景不完全匹配: http://forums.asp.net/t/1998033.aspx?Passing+multiple+Models+to+View+from+Controller

我还参考了 stackoverflow 中的其他类似问题,但我无法得到想要的结果。

【问题讨论】:

  • 创建第三个模型,结合您想要的结果并将该模型绑定到您的视图
  • 我意识到这个问题已经有几年的历史了,但我在下面给出了一个正确的答案。花了几个小时才得出完整的解决方案。

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


【解决方案1】:

您应该创建一个 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
}

【讨论】:

  • Model.TheFirstTable 在视图中给我一个错误,说 MyViewModel 不包含 TheFirstTable 的定义。在页面顶部,我有@model List&lt;MyProject.Models.MyViewModel&gt;
  • 您不需要将 MyViewModel 放在列表中。这些列表位于视图模型内。所以应该是@model MyProject.Models.MyViewModel
【解决方案2】:

bothTable 的模型更改为List&lt;table1&gt; List&lt;table2&gt;。例如:

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);

【讨论】:

    【解决方案3】:

    完成这项工作的正确包装器是

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

    然后Controller将值传递给视图如下..

    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;
    

    .. 返回视图(列表数据);

    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>
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多