我是编程的初学者,我正在尝试构建一个可以搜索目录并显示视图中找到的所有mvc应用程序。我搜索时会弹出一条错误消息。如果有人告诉我我做错了什么或指出我正确的方向,我将不胜感激。
错误信息是这样的:
> The view 'C:\Users\carrick\Downloads' or its master was not found or
> no view engine supports the searched locations. The following
> locations were searched:
> ~/Views/DirectorySearch/C:\Users\carrick\Downloads.aspx
> ~/Views/DirectorySearch/C:\Users\carrick\Downloads.ascx
> ~/Views/Shared/C:\Users\carrick\Downloads.aspx
> ~/Views/Shared/C:\Users\carrick\Downloads.ascx
> ~/Views/DirectorySearch/C:\Users\carrick\Downloads.cshtml
> ~/Views/DirectorySearch/C:\Users\carrick\Downloads.vbhtml
> ~/Views/Shared/C:\Users\carrick\Downloads.cshtml
> ~/Views/Shared/C:\Users\carrick\Downloads.vbhtml
我的控制器看起来像这样
public class DirectorySearchController : Controller
{
//
// GET: /DirectorySearch/
public ActionResult Index()
{
return View();
}
public ActionResult GetDirFiles(string directorySearch)
{
//first check directorySearch is a valid path
//then get files
Directory.GetFiles(directorySearch);
ViewBag.message = directorySearch;
return View(ViewBag.message);
}
}
}
和我的观点
@{
;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>GetDirFiles</title>
</head>
<body>
<div>
<h2>Search Results</h2>
<ul>
<li>@Viewbag.message;</li>
</ul>
</div>
</body>
</html>
答案 0 :(得分:1)
在这一行
return View(ViewBag.message);
将其更改为
return View();
第一个参数是ViewName。 ViewBag被环境/隐式传递给视图,所以你不需要传递它。
答案 1 :(得分:1)
这一行:
return View(ViewBag.message);
您告诉它使用目录文件的名称呈现视图,因此您收到该错误消息的原因。 ViewBag已经传递到您的视图中,因此您不需要自己传递它。
你很可能只想要调用
的空参数return View();
默认情况下会返回控制器中方法名称的视图。
除了您没有将文件传递给视图外,您还要传递路径。你需要做这样的事情。 请注意ViewBag(不是Viewbag)的情况
控制器:
ViewBag.message = string.Join(",", Directory.GetFiles(directorySearch));
查看:
<li>@ViewBag.message</li>
或者您可以在视图中编写一个简单的循环
控制器:
ViewBag.message = Directory.GetFiles(directorySearch);
查看:
@foreach(string file in ViewBag.message)
{
<li>@file</li>
}