2012-11-03 59 views
0

我传递的对象(表)到一个视图,像这样的对象:访问传递到视图

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()); 
} 

如何从我的索引视图中访问该对象?我想我需要将它添加到我的动态视图包中,并以此方式访问它,而不是将其作为参数传递,这是正确的还是如果我保持上面的控制器代码原样,是否可以从视图中访问此对象?

感谢

回答

1

根据您的操作方法将您的视图强制类型化为要返回的类/类型。

在你的情况下,你正在返回一个CarProfile类对象列表。因此,在您的视图(index.cshtml)中,将其作为第一行。

@model List<CarProfile> 

现在你可以使用关键字Model。比如访问CarProfile列表,要显示在列表中的所有项目,在一个循环中,你可以这样做

@model List<CarProfile> 
@foreach(var item in CarProfile) 
{ 
    <h2>@item.Name</h2> 
} 

假设NameCarProfile类的财产。

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并将其返回到您的视图。如果您想了解ViewModels,请点击以下链接:http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3fundamentals_topic7.aspx

1

您可以通过在视图中传递ViewBag(您写下控制器的方式)来访问视图中的对象。但我认为,通过ViewModel有一个ViewModel并传递数据来查看通常会更好。 将业务对象直接传递给模型(完成的方式),使模型依赖于业务对象,在大多数情况下它不是最优的。同时使用ViewModel而不使用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); 
    }