强类型的Viewbag物品

Joh*_*ell 5 c# razor viewbag asp.net-mvc-3

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

比如说我有

ViewBag.Movies.Name
ViewBag.Movies.Length
Run Code Online (Sandbox Code Playgroud)

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

class Movie { 
    public string Name {get; set;}
    public string Length {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

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

@model Transactions.UserTransactionDetails
Run Code Online (Sandbox Code Playgroud)

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

Ter*_*rry 17

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

var movie = (Movie)ViewBag.Movie;
Run Code Online (Sandbox Code Playgroud)

然后键入@movie.将产生智能感知Name,Length.


Sta*_*anK 11

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

例如

public class MovieTransactionViewModel 
{
   public List<Transaction> Transactions { get; set; }
   public List<Movie> Movies { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,让你的视图使用它作为它的模型,你将在你的视图中获得intellisense.

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