我将一个对象(一个List)传递给一个这样的视图:
private readonly CarsContext _db = new CarsContext();
public ActionResult Index()
{
ViewBag.Message = "Foobar";
var result = from cars in _db.CarProfiles
where cars.CarOfTheWeek
select cars;
return View(result.ToList());
}
如何从Index视图中访问此对象?我想我需要将它添加到我的动态viewbag中,并以那种方式访问它而不是将其作为参数传递,这是正确的还是如果我将控制器代码保持在原样,我是否可以从视图中访问该对象?
由于
答案 0 :(得分:1)
使用您的操作方法,使您的视图强烈输入您要返回的类/类型。
在您的情况下,您将返回CarProfile
类对象的列表。因此,在您的视图(index.cshtml)中,将其作为第一行删除。
@model List<CarProfile>
现在,您可以使用关键字CarProfile
访问Model
列表。例如,您希望在循环中显示列表中的所有项目,您可以这样做
@model List<CarProfile>
@foreach(var item in CarProfile)
{
<h2>@item.Name</h2>
}
假设Name
是CarProfile
类的属性。
答案 1 :(得分:1)
您可以通过ViewBag(您编写控制器的方式)传递视图中的对象。但我认为,通过ViewModel获取ViewModel并传递数据通常更好。 将Business对象直接传递给模型(您已完成的方式),使模型依赖于业务对象,在大多数情况下它不是最佳的。使用ViewMode而不是使用ViewBag也具有使用StrongTypes的优势。
private readonly CarsContext _db = new CarsContext();
public ActionResult Index()
{
var result = from cars in _db.CarProfiles
where cars.CarOfTheWeek
select cars;
MyViewModel myViewModel = new MyViewModel( );
myViewModel.Message = "Foobar";
myViewModel.ResultList = result.ToList();
return View( myViewModel );
}
答案 2 :(得分:0)
在Index.cshtml视图中,您的第一行是:
@model YOUR_OBJECT_TYPE
例如,如果你在你的行中传递一个字符串:
return View("hello world");
然后你在Index.cshtml中的第一行是:
@model String
在您的情况下,您在Index.cshtml中的第一行将是:
@model List<CarProfile>
这样,如果在Index.cshtml视图中键入@Model,则可以访问CarProfile列表的所有属性。 @Model [0]将在您的列表中返回您的第一个CarProfile。
只是提示,ViewBag不应该在大多数时间使用。相反,您应该创建一个ViewModel并将其返回到您的视图。如果您想阅读有关ViewModel的内容,请点击以下链接:http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3fundamentals_topic7.aspx