在我的Controller中,我有一个名为“ObjectData”的类,它包含一个ID和一个字符串:
public class ObjectData
{
public int ObjectId { get; set; }
public string Name { get; set; }
}
我正在尝试通过ViewBag将这些列表传递给视图,但我不知道如何遍历数组中的项目,因为classtype不正常。我这样做是因为我不想将一堆对象及其数据传递给视图,当我只需要ID和名称时(这是一个有效的问题吗?)。
我正在考虑像这样循环:
foreach (ObjectData i in ViewBag.ParentSetIds)
{
@Html.ActionLink(i.Name, "Detail", new { objectId = i.ObjectId }, null)
}
但Razor不承认该类型。如何实现这一目标?
答案 0 :(得分:1)
您必须在行上完全限定您的姓名:
foreach (Put.Your.Namespaces.Here.ObjectData i in ViewBag.ParentSetIds)
Razor不会使用与您的控制器相同的using
声明。您可以在View目录中使用web.config
添加此类命名空间,以便不是每次都完全限定它。
关于是否应该关注将这些对象传递给视图的问题。不,没有必要担心它。我建议将对象ObjectData
从控制器移动到名为ModelView
或ViewModel
的控制器文件夹旁边的文件夹,并在此处创建该类。这就像是公开接受的“hack”这样的模型,它代表了某种“真实”模型的另一种观点。它与生成MVC3项目时相同,它为您创建的文件AccountModels.cs
包含完全相同的模型。但是你可以在Model
文件夹中找到它,但可以讨论它是否应该在ViewModel
文件夹中。另外,如果它不是真正帮助数据的话,那么将这些数据作为Model而不是ViewBag部分传递。
答案 1 :(得分:0)
您可以使用:
foreach (var i in ViewBag.ParentSetIds)
让编译器根据ViewBag.ParentSetIds
确定命名空间答案 2 :(得分: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;}
}