【问题标题】:Passing multiple models to a view将多个模型传递给视图
【发布时间】:2011-12-21 02:52:25
【问题描述】:

我在将多个模型传递给单个视图时遇到问题,在阅读了其他帖子后,我收集到我需要创建一个单独的类并实例化该类并将该实例化的类返回到视图。但是,我该怎么做?

我想使用 Entity Framework 和 Linq 来进行查询。如果可以提供示例代码供我学习...

【问题讨论】:

标签: asp.net-mvc linq entity-framework-4.1


【解决方案1】:

使用

public ActionResult Index()
{
    SomeClass1 object1 = new SomeClass1();
    SomeClass2 object2 = new SomeClass2();
    ViewData["someName1"]=object1;
    ViewData["someName2"]=object2;
    return View(ViewData);
}

在“查看”页面中,您可以通过以下方式访问它们:

<% SomeClass1  object1 = ViewData["someName1"] as SomeClass1; %>
<% SomeClass1  object2 = ViewData["someName2"] as SomeClass2; %>

【讨论】:

  • 我会选择另一个答案并使用子 ViewModel。所有这些魔术字符串和强制转换可能/将是调试的痛苦,并且只会产生运行时错误。
  • @Syska “动态”关键字在c# 4.0 中引入!那么之前的框架呢?
  • 那么我仍然会选择包含其他 2 个视图模型的 ViewModel。我真的看不到这样做的好处,除非你只是在一个小的本地项目中尝试一些东西。我也开始这样做,但最后……真是一场噩梦。如果可以的话,我会避免使用动态,除非我们可以像 R# 试图提供一些智能,这样我们就可以在构建过程中捕获错误。
【解决方案2】:

您可以使用动态的快速而肮脏的方式:

dynamic viewdata = new ExpandoObject();
viewdata.object1 = Model1;
viewdata.object2 = Model2;

return View(viewdata);

或者你可以正确地做它并创建一个视图模型。

class ViewModel1 {
  public MyModel Model1 { get; set; }
  public MyOtherModel Model2 { get; set; }
}

ViewModel1 viewdata = new ViewModel1();
viewdata.Model1 = Model1;
viewdata.Model2 = Model2;

return View(viewdata);

【讨论】:

    【解决方案3】:

    创建视图模型。视图模型是通常由其他模型组成且不绑定到您的数据模型的模型。 MvcMusic 演示有一个很好的使用视图模型的例子。

    虽然ViewData 可以工作,但它不是类型安全的,基本上取决于魔术字符串,所以我会避免它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 2016-09-08
      • 2011-12-05
      相关资源
      最近更新 更多