创建新视图将导致404页面

时间:2012-10-01 01:14:36

标签: .net-4.0 asp.net-mvc-4

我正在尝试做一些非常简单的事情,而我似乎错过了一些东西。我试图在互联网上搜索结果但是没有得到任何结果,所以我想知道是否有人可以就这看似简单明了的任务提出建议。

我有一个有效的MVC应用程序,并使用默认值(脚手架)创建了模型,控制器,视图。

现在我想为我的一个控制器操作创建一个新视图:

public ActionResult Index()
        {
            return View(db.Blog.ToList());
        }

所以我右键单击Action Result并单击Add View。 这给了我一个对话框,我在其中指定视图名称“Test”,单击“Create a Strongly Typed View”复选框并选择Blog的模型类。 对于脚手架模板,我留空(注意我已尝试索引没有任何好结果) 现在我单击“添加”按钮。

正如预期的那样,这会在Views / Blogs

下创建一个新的视图test.cshtml

现在,当我开始没有调试并转到url:localhost:12341 / Blog / Test

我收到以下错误:

'/'应用程序中的服务器错误。

无法找到资源。   说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

请求的网址:/ Blog / test


版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.17929

2 个答案:

答案 0 :(得分:4)

可能存在很多问题,为什么它不起作用。研究ASP.NET MVC路由可能值得您花些时间。目前,Mystere Man的解决方案可能是一个“快速解决方案”,假设您已将其他所有内容设置为默认值。

特别是,当您告诉浏览器转到localhost:12341/Blog/Test时,它(可能)会查找名为BlogController的控制器,然后执行Test操作。在您的情况下,您的操作称为Index,因此您可以转到localhost:12341/Blog/Index(尽管您可以省略Index,因为这是默认操作)。最后,由于您的操作被称为Index,因此View()功能会自动查找Index.cshtml。这在msdn文档中有详细说明:

http://msdn.microsoft.com/en-us/library/dd492930(v=vs.100).aspx

特别是:

  

如果ViewName属性为空,则使用当前操作名称代替ViewName属性。

答案 1 :(得分:3)

您的操作方法称为索引,而不是测试。如果你想要url是/ Test,那么你需要命名动作方法Test(还有其他方法可以做到,但这是最好的方法)

如果要使用视图测试,则需要在View()方法中指定它。

return View("Test", db.Blogs.ToList());

但是,您仍然需要使用索引网址/博客/索引,因为您的操作方法是索引。