C# 强类型Viewbag项
如果我使用的是一个包含强类型对象的ViewBag,MVC Razor上是否有任何方法来定义(或强制转换)它,以便它的所有元素都显示在IntelliSense中 比如说我有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.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; }
}