0

在我的控制器中,我有一个名为“ObjectData”的类,其中包含一个 ID 和一个字符串:

public class ObjectData
{
    public int ObjectId { get; set; }
    public string Name { get; set; }
}

我试图通过 ViewBag 将这些列表传递给视图,但我不知道如何循环遍历数组中的项目,因为类类型不正常。我这样做是因为我不想将一堆对象及其数据传递给视图,而我只需要 ID 和名称(这是一个有效的问题吗?)。

我正在考虑这样循环:

foreach (ObjectData i in ViewBag.ParentSetIds)
{
    @Html.ActionLink(i.Name, "Detail", new { objectId = i.ObjectId }, null)
}

但 Razor 无法识别该类类型。如何实现?

4

3 回答 3

1

你可以使用:

foreach (var i in ViewBag.ParentSetIds)

并让编译器根据 ViewBag.ParentSetIds 确定命名空间

于 2013-02-15T00:27:09.193 回答
1

您必须在该行中完全限定您的类型名称:

foreach (Put.Your.Namespaces.Here.ObjectData i in ViewBag.ParentSetIds)

Razor 不使用与using控制器相同的声明。您可以web.config在 View 目录中使用来添加这样的命名空间,而不是每次都完全限定它。

关于您是否应该担心将此类对象传递给查看的问题。不,没有必要担心。我建议将对象从控制器移动到名为或在此处创建类ObjectData的控制器文件夹旁边的文件夹。这就像公开接受的“hack”,拥有代表对某些“真实”模型的另一种看法的模型。就像您生成 MVC3 项目时它为您创建的包含完全相同类型的模型的文件一样。但是你在文件夹中找到它,而它是否应该在文件夹中可以讨论。此外,如果它不仅仅是帮助数据,则将此数据作为模型而不是作为部分 ViewBag 传递。ModelViewViewModelAccountModels.csModelViewModel

于 2013-02-14T23:23:40.177 回答
0

在我的控制器中,我有一个名为“ObjectData”的,其中包含一个 ID 和一个字符串:

等等,什么?为什么你的控制器中有一个类?

我正在尝试通过 ViewBag 将这些列表传递给视图,

只需使用视图模型。如果你是,你可以List<ObjectData>参与其中。在您的控制器中,您加载该列表(让我们调用它ObjectDataList),并将其发送到您的视图。

在视图(剃刀)中,你会有类似的东西:

@model MyProject.MyModel

@foreach(var i in Model.ObjectDataList)
{
   @Html.ActionLink(i.Name, "Detail", new { objectId = i.ObjectId }, null)
}

编辑:

为了澄清起见,您的视图模型可能是:

public class MyModel
{
     public string Title {get;set;}
     public List<ObjectData> ObjectDataList {get;set;}

}
于 2013-02-15T00:37:45.953 回答