访问传递给视图的对象

时间:2012-11-03 17:40:35

标签: c# asp.net-mvc view

我将一个对象(一个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中,并以那种方式访问​​它而不是将其作为参数传递,这是正确的还是如果我将控制器代码保持在原样,我是否可以从视图中访问该对象?

由于

3 个答案:

答案 0 :(得分:1)

使用您的操作方法,使您的视图强烈输入您要返回的类/类型。

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

@model List<CarProfile>

现在,您可以使用关键字CarProfile访问Model列表。例如,您希望在循环中显示列表中的所有项目,您可以这样做

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

假设NameCarProfile类的属性。

答案 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