MVC控制器索引有时是404?

时间:2011-07-12 22:27:52

标签: model-view-controller asp.net-mvc-3 asp.net-mvc-routing asp.net-mvc

我添加了3个控制器,对于其中一个控制器,默认情况下索引视图不起作用。

Works(shows index):
http://localhost:1767/Employees/  
http://localhost:1767/Employees/Index
http://localhost:1767/Home/       
http://localhost:1767/Home/Index
http://localhost:1767/
http://localhost:1767/Companies/Index

Doesn't work(gives 404 error):
http://localhost:1767/Companies/  

1)我创建了一个实体框架类库,它是从包含Employees和Companies表的数据库生成的。

2)创建了一个MVC 3空项目。

3)从MVC项目添加了一个项目引用到EF类库项目。

4)添加了一个控制器,在添加控制器对话框中,我选择了EF模型和其中一个表并命名为控制器CompaniesController

5)然后我记得我需要一个HomeController,所以我添加了另一个控制器,命名为HomeController,并再次选择了公司实体。

6)最后,我添加了一个EmployeesController,选择了Employees实体。

这是我的Global.asax.cs中唯一的路线:

routes.MapRoute(
          "Default", // Route name
          "{controller}/{action}/{id}", // URL with parameters
          new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

为什么http://localhost:1767/Companies/网址不像所有其他控制器一样默认为索引操作?我做了一些练习MVC项目,似乎总是遇到这个问题。 Employees控制器默认为Index工作正常,即使没有路由告诉它这样做?

编辑:这是我收到的错误:

The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.

Requested URL: /Companies/

编辑:所以我在网上发布示例时通常不会透露我的实体名称或域名详细信息,但在这种情况下,公司实际上称为属性,并且将名称更改为属性2以查看视图文件夹和控制器修复了问题。因此,似乎属性是一个特殊关键字,如果它出现在URL

中,则会将默认值分解为索引

4 个答案:

答案 0 :(得分:5)

将视图文件夹和控制器从属性(控制器)更改为Properties2(控制器),现在工作正常。显然,“属性”在URL中有一些特殊处理,并将默认值打破为索引

答案 1 :(得分:3)

您是否向公司控制器添加了索引操作?

[HttpGet]
public ActionResult Index()
{
    return View();
}

答案 2 :(得分:3)

我收到了403.1,因为我的文件夹名称与web项目根目录下的控制器名称相同。因此,即使在达到MVC路由解析之前,它也无法尝试列出文件夹内容。可能是类似问题,属性是任何项目中的标准文件夹

答案 3 :(得分:2)

您在公司的“视图”文件夹中是否有索引视图?即Views / Companies / Index.aspx?

我认为它不起作用的唯一原因(基于提供的信息)是因为拼写错误,公司控制器不是从控制器继承或实现IController接口,或者视图/控制器文件夹中缺少视图为行动指数。

编辑:这是我期望的CompaniesController看起来像:

namespace MyProject.Controllers

public class CompaniesController : Controller
{
     [HttpGet]
     public ActionResult Index() {
         return View();
     }
}

它将驻留在项目的Controllers文件夹中。