在Controller中传递多个参数以在MVC3 Razor视图引擎中查看

时间:2012-07-03 08:39:13

标签: asp.net-mvc-3

如何使用相同的操作从控制器发送两个模型

2 个答案:

答案 0 :(得分:2)

假设您的两个模型是MyModel和MyOtherModel的实例。

我可以想到两个选择:

  1. 将MyModel作为模型传递,并将MyOtherModel放入ViewBag。
  2. 使用包含MyModel的属性和包含MyOtherModel的另一个属性创建类MyBigModel,并将MyBigModel作为模型传递。
  3. 选项1确实不是您理想的解决方案。由于您的模型应该与您的视图相关(这就是我更喜欢名称ViewModel的原因),我真的会选择2。

    选项2看起来像这样:

    public class MyBigModel
    {
        public MyModel { get; set; }
        public MyOtherModel { get; set; }
    }
    

答案 1 :(得分:2)

使用ViewModel - 再创建一个包含两个模型的模型,然后将其发送到视图

public class MyCustomViewModel
{
     public MyFirstModel First { get; set; }
     public MySecondModel Second { get; set; }
}

在控制器中

public ActionResult Action()
{
     MyFirstModel first = new MyFirstModel();
     MySecondModel second = new MySecondModel();

     MyCustomViewModel model = new MyCustomViewModel();
     model.First = first;
     model.Second = second;

     return View(model);
}

通常,顾名思义,您应该为应用程序中的每个视图使用自定义ViewModel,然后使用AutoMapper之类的工具将这些视图模型来回映射到域模型。视图模型为您构建视图提供了极大的灵活性,因为您可以在不更改域的情况下为其提供任何形状和形式。