ASP.NET MVC3区域内的嵌套资源

时间:2011-10-06 18:34:17

标签: asp.net-mvc-3 asp.net-mvc-routing

我来自Rails背景,我在围绕微软的MVC框架时遇到了问题。

今天是路由。 Rails为您提供了名称空间(例如Admin),它等同于.NET MVC3中的Areas。 Rails还允许您在路由中定义嵌套资源,这些资源将为您提供示例/ posts / 1 / comments / 1 / edit,在您的操作中,您基本上可以获得params [:post_id]和params [:id]。

我在ASP.NET MVC3中需要类似的东西,但不知道如何解决这个问题。谷歌搜索导致至少30种不同的方式来实现这一点,而没有提到区域。

感觉我应该在这里添加/修改内容:

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }

但不确定在哪里。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我认为你在正确的文件中(你的AreaRegistration.cs文件)。我更喜欢对我的路线更加明确,而不是使用他们提供的默认“catch all”类型的路线。所以这是我如何处理这个问题的一个例子:

在RegisterArea方法中,在现有路线之前添加类似的东西(或者将所有路线全部除去)

context.MapRoute(
    "Edit_Comment",
    "posts/{postId}/comments/{commentId}/edit",
    new { controller = "Comment", action = "Edit" }
);

然后在您的CommentController.cs中,您将执行以下操作:

public ActionResult Edit(int postId, int commentId)
{
    // Do your edit logic then return an ActionResult
}