5

如果我使用的是包含强类型对象的 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

所以 Movie 的成员可以在 Razor 中使用?

4

4 回答 4

17

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

var movie = (Movie)ViewBag.Movie;

然后打字@movie.会产生智能感知Name, Length

于 2012-06-18T20:18:54.877 回答
11

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

例如

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

然后,让您的视图将其用作模型,您将在视图中获得智能感知。

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

于 2012-06-18T20:56:15.787 回答
3

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

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

于 2012-06-18T20:24:38.987 回答
1

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

于 2012-06-18T20:18:59.730 回答