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

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

谢谢

4

3 回答 3

1

在您的 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

于 2012-11-03T17:59:02.323 回答
1

从您的操作方法中,将您的视图强类型化为您要返回的类/类型。

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

@model List<CarProfile>

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

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

假设NameCarProfile类的属性。

于 2012-11-03T18:13:02.177 回答
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 );
    }
于 2012-11-03T18:13:37.167 回答