如果我正在使用包含强类型对象的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中使用吗?
答案 0 :(得分:15)
您可以将其存储在变量中。
var movie = (Movie)ViewBag.Movie;
然后输入@movie.
将为Name
,Length
生成智能感知。
答案 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实现。如果你需要一个强类型的模型,为什么不使用它?