如果我要将其他数据(模型除外)传递到我的视图中,比如说来自特定文件夹的文件列表,那么最好的方法是什么?
我在考虑制作方法并将列表返回ViewData
:
public List<string> GetFiles(int id, string cat)
{
var files = new List<string>();
var folder = "~/App_Data/uploads/" + cat + "/" + id.ToString();
foreach (var file in Directory.GetFiles(folder))
{
files.Add(file);
}
return files;
}
控制器:
ViewData["files"] = db.GetFiles(id, "random");
观点:
@foreach (var item in ViewData["files"]){ //markup }
首先,我听说不应该使用viewdata和viewbag。其次,这段代码不起作用。 Viewdata对象的某些内容不可枚举。我应该为这些文件创建一个模型类。如果是这样,怎么样?一个视图中有2个型号?我有点困惑如何做到这一点。
答案 0 :(得分:5)
如果我要将其他数据(模型除外)传递到我的视图中, 比如说一个特定文件夹中的文件列表,最好的方法是什么 那样做?
编写一个视图模型,其中包含视图所需的所有属性,并让控制器操作将此视图模型传递给视图。所以:
public class MyViewModel
{
public List<string> Files { get; set; }
public string Foo { get; set; }
... some other properties that your view might need
}
然后是控制器:
public ActionResult Index(int id)
{
var model = new MyViewModel
{
Files = db.GetFiles(id, "random"),
Foo = "bar"
};
return View(model);
}
最后在你的强类型视图中:
@model MyViewModel
@foreach (var file in Model.Files)
{
<div>@file</div>
}
<div>@Html.DisplayFor(x => x.Foo)</div>