如何创建视图以显示ASP.Net MVC 4项目中的文件列表

时间:2015-01-30 07:45:51

标签: c# asp.net-mvc asp.net-mvc-4 viewbag

我正在学习ASP.Net MVC 4编程。目前,我想在网页上显示文件列表。以下是我到目前为止所做的事情。

HomeController.cs我编辑了Contact操作,如下所示:

public ActionResult Contact()
{
     ViewBag.Message = "Your file page.";
     DirectoryInfo dirInfo = new DirectoryInfo(@"c:\");
     List<string> filenames=dirInfo.GetFiles().Select(i=>i.Name).ToList();
     ViewBag.data = filenames; 
     ///^^ Is this correct??    

     return View();
}

我希望文件名显示在网页上。我应该在观点中写些什么?我右键单击Contact操作并获得默认视图,其中包含:

@{
    ViewBag.Title = "Contact";
}

<h2>Contact</h2>

2 个答案:

答案 0 :(得分:1)

您在页面上显示的主要内容(即视图是&#34;对于&#34;)应该是模型。查找@model指令。这里应该是@model List<string>。然后,使用ViewBag.data而不是设置return View(filenames);。在您的视图中,您将能够访问强类型模型。如果你对我刚才所说的内容有所了解,你需要阅读更多关于viewmodel在ASP.NET MVC中的作用。

答案 1 :(得分:1)

正如@ChrisV所写,您可能想要创建一个强类型视图。这意味着您将模型与视图相关联。然后,您将使用View()重载传递数据,该重载将Model作为参数。在您当前的版本中,您使用ViewBag向视图发送数据。这没有错,但最好是创建一个强类型视图,至少在你学习的时候。

话虽如此,我可能会做以下更改:

在您的控制器中,获取FileInfo个对象的列表,而不是文件名FileInfo类型公开了可用于丰富显示数据的其他功能。

public ActionResult Contact()
{
    ViewBag.Message = "Your file page.";
    DirectoryInfo dirInfo = new DirectoryInfo(@"c:\");
    List<FileInfo> files = dirInfo.GetFiles().ToList();

    //pass the data trough the "View" method
    return View(files);
}

接下来,您需要在视图中指定模型类型,并迭代和显示数据:

@model IEnumerable<FileInfo>

@{
     ViewBag.Title = "Contact";
}

<h2>Contact</h2>

<ul>
@foreach (FileInfo file in Model)
{
     <li>@file.Name</li>
}
</ul>

请注意,您在页面上实际显示的内容和方式取决于您。您可以为文件创建一个表,并显示创建时间,大小甚至命令(下载,删除等)。这只是一个&#34;模板&#34 ;;就这样使用它。