Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强类型Viewbag项_C#_Asp.net Mvc 3_Razor_Viewbag - Fatal编程技术网

C# 强类型Viewbag项

C# 强类型Viewbag项,c#,asp.net-mvc-3,razor,viewbag,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;} } 我能不能像《模

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

您可以将其存储在变量中

var movie = (Movie)ViewBag.Movie;

然后键入
@movie.
将产生
名称
长度
否的智能感知。这是因为ViewBag不是强类型的。它是使用dynamics和ExpandooObject实现的。如果您需要强类型模型,为什么不使用一个呢

远离可视包:


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

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

e、 g

公共类电影TransactionViewModel
{
公共列表事务{get;set;}
公共列表电影{get;set;}
}
然后,让您的视图使用它作为模型,您将在视图中获得intellisense


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

ViewBag不是强类型的,因此您应该使用强类型模型。我已经在使用一个模型来来回传递用户表单的事务信息,所以我不认为我可以有两个模型:(难道你不能将你需要的数据添加到你的模型中吗?你使用的是视图模型吗?使用视图模型(一般来说)是个好主意,但是如果你需要使用多个模型中的实体,它是“必需的”。电影实际上保存在实体框架对象中。另一个保存在视图模型中(用户事务)。我正在使用设置了验证标志的用户事务模型进行验证。当我将它们组合在一起时,我无法正确启动验证。因此,将验证放入viewbag中:|抱歉,此处仍在学习:)有时它很有用。例如,当您想在_Layout.cshtml的
部分中设置标题和meda描述属性时
public class MovieTransactionViewModel 
{
   public List<Transaction> Transactions { get; set; }
   public List<Movie> Movies { get; set; }
}