强类型的Viewbag物品

时间:2012-06-18 20:16:34

标签: c# asp.net-mvc-3 razor viewbag

如果我正在使用包含强类型对象的ViewBag,MVC Razor是否有任何方法可以定义(或转换)以使其中的所有元素都出现在IntelliSense中?

例如,假设我有

ViewBag.Movies.Name
ViewBag.Movies.Length

我知道电影是对象类型电影,其成员名称和长度

class Movie { 
    public string Name {get; set;}
    public string Length {get; set;}
}

我可以以某种方式投射这个,就像我为模型

做的那样
@model Transactions.UserTransactionDetails

这样电影的成员可以在Razor中使用吗?

4 个答案:

答案 0 :(得分:15)

您可以将其存储在变量中。

var movie = (Movie)ViewBag.Movie;

然后输入@movie.将为NameLength生成智能感知。

答案 1 :(得分:11)

使用ViewModel,其中包含您查看需要的所有不同对象的属性

e.g。

public class MovieTransactionViewModel 
{
   public List<Transaction> Transactions { get; set; }
   public List<Movie> Movies { get; set; }
}

然后,让你的视图使用它作为它的模型,你将在你的视图中获得智能感知。

这样您就不会更改模型,因此EntityFramework不会受到影响。

答案 2 :(得分:3)

远离VieWbag: http://completedevelopment.blogspot.com/2011/12/stop-using-viewbag-in-most-places.html

只需创建一个包含其他模型的新VieWModel。

答案 3 :(得分:1)

没有。这是因为ViewBag没有强类型。它使用动态和ExpandoObject实现。如果你需要一个强类型的模型,为什么不使用它?