试图让区域在MVC3中工作

时间:2011-08-08 14:30:50

标签: asp.net asp.net-mvc

我有一个新的MVC3项目设置,我在控制器中添加了一个名为“area1”的文件夹。

然后我将控制器放在名为abc.cs的文件夹中:

public class abc : Controller
{
        //
        // GET: /abc/
    public ActionResult Index()
    {
        return Content("abc index");
    }

}


public class MyAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get { return "My Area"; }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "abc",
            "area1/{controller}/{action}/{id}",
            new { controller = "abc", action = "index", id = UrlParameter.Optional }
            );

        // And so on ...
    }
}

现在我去:

/area1/abc/index

我收到错误页面。

The resource cannot be found.

我在RegisterArea方法中放了一个断点,它不会被调用。

我做错了什么?

其他几个问题:

  1. 我可以将区域文件夹和控制器代码放在项目的任何位置,还是必须在主控制器文件夹中?

  2. 我可以在我的区域文件夹中查看我的观点吗?

2 个答案:

答案 0 :(得分:3)

您应该使用的文件夹结构是:

- Project -
    Areas
        < Area Name >
            Controllers
                MyController.cs
            Models
                MyModel.cs
            Views
                etc.

为什么不直接使用“添加区域”上下文菜单选项?

在回答您关于可以放置代码的位置的问题时,有一定的灵活性,但ASP.NET MVC的许多功能都依赖于约定优于配置。把代码放在MVC想要它的地方,你就会让你变得更容易。

答案 1 :(得分:1)

我不确定你的意思

  

我在控制器中添加了一个名为“area1”的文件夹。

由于您的控制器是一个类,因此向其添加文件夹是没有意义的。

创建区域的过程如下:

  1. 在Visual Studio中,右键单击项目根目录,然后选择Add|Area

  2. 输入区域的名称 - Area1或您拥有的名称。

  3. VS将创建~/areas/area1,并添加Views,Controllers和Models文件夹。

  4. 例如,将IndexController.cs添加到Areas1 / Controllers文件夹中。

  5. 将视图“Index.cshtml”添加到Area1 / Views文件夹

  6. 重建解决方案。

  7. 在浏览器中打开http://localhosdt/area1/index,您就会看到自己的观点。