传递匿名对象进行查看

时间:2011-11-02 17:25:57

标签: asp.net-mvc asp.net-mvc-3

我想将两个值从控制器动作传递到asp.net MVC 3 Razor视图。我在行动方法中这样做:

var model = new { reportid = rid, refno = refernumber};
return View(model );

但是当我尝试在这样的视图中访问它时:

@Model.reportid

我知道,对象不包含属性reportid

如何在不使用viewbag的情况下传递多个值?

3 个答案:

答案 0 :(得分:16)

好吧,我强烈建议您使用ViewModel类。但如果由于某种原因你有额外的viewmodel类的恐惧症,你可以使用名为元组

的C#功能
var model = Tuple.Create(firstObject, secondObject)

然后你的视图将是Tuple类型,例如

@model Tuple<int, string>

你可以像这样访问它们

@Model.Item1

然后你可以祝贺自己,你已经实现了隐藏意义的好混乱:)

答案 1 :(得分:3)

您正在将匿名对象传递给视图,但匿名对象是程序集的内部对象,因此您无法执行此操作。

如果您不想定义自己的模型或使用ViewState和ViewBag,并且仍想使用匿名对象 - this帖子对您有所帮助。

答案 2 :(得分:2)

完成此任务的另一种方法是使用ExpandoObject

dynamic model = new System.Dynamic.ExpandoObject();
model.reportid = 123
model.refno = 456;

将视图模型类型设置为dynamic

@model dynamic

@Model.reportid
@Model.refno