如何在ASP.NET MVC3中设置包含区域的简单路径?

时间:2012-01-06 03:32:27

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

我想使用区域,所以我设置了以下内容:

public class ContentAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Content";
            }
        }

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

我希望将输入以下网址的人定向到我的“内容”区域内的控制器。

www.stackoverflow.com/Content/0B020D/test-data

我希望有人输入任何带有“/ Content /”的网址,然后输入六个字符:

- Page action in a controller named ItemController
- Six characters passed as the parameter id
- Optional text after that (test-data in this case) to be put into parameter title 

我该怎么做?在使用区域时,我不太熟悉设置路线。

要放入名为ID

的变量的六位数字

1 个答案:

答案 0 :(得分:2)

所以你正在寻找像

这样的东西
public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Content_default",
        "Content/{id}/{optional}",
        new { controller = "ItemController", action = "TheActionYouWantThisToAllRouteTo" }
}

这会将所有内容默认为一个控制器和操作方法(您必须在实例中指定)。然后,您可以获得如下数据:

public ActionResult TheActionYouWantThisToAllRouteTo (string id, string optional)
{
    // Do what you need to do
}

路由的设置方式,您可以通过将其包装在一对{ }花括号中,将所需的信息命名为URL。如果您想将optional的名称改为isTestData,那么您只需将路线更改为"Content/{id}/{isTestData}"

注意:由于您没有指定要将其路由到的默认操作方法,因此我将其替换为TheActionYouWantThisToAllRouteTo。更改该字符串以读取您想要的所有操作方法。这也意味着您不能拥有名为ContentController的“常规”控制器。

修改

Stephen Walther有一篇关于自定义路线限制的博客文章。 It can be found here。这应该是完成你所需要的一个良好的开端。