如何将路由操作作为参数传递给具有MVC4的Index方法

时间:2012-09-06 12:40:33

标签: c# asp.net-mvc asp.net-mvc-3 routes

我有以下路线,其中任何以A,F或L开头的网址都是定向的 到索引行动。它看起来像是使用了C sharp正则表达式。

        context.MapRoute(
            "content",
            "{page}/{title}",
            new { controller = "Server", action = "Index" },
            new { page = @"^[AFL][0-9A-Z]{3}$" }
        );

我想做类似的事情,但这次指示任何具有菜单,目标,页面或主题操作的URL转到索引操作并传递“菜单”,“目标”,“页面”或索引操作的“主题”作为参数:

有人能告诉我如何做到这一点。它看起来像C#正则表达式bubut我不知道如何做第二个我需要的表达式 路由。

2 个答案:

答案 0 :(得分:1)

您只需要一个简单的路线约束:

   context.MapRoute(
        "content",
        "{page}/{title}",
        new { controller = "Server", action = "Index" },
        new { page = @"Menus|Objectives|Pages|Topics" }
    );

然后您的操作方法签名将如下所示:

public ActionResult Index(string page)
{
    ...
    return View();
}

答案 1 :(得分:0)

请看这个例子......

http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-route-constraint-cs 你已经用参数定义了一条路线。

routes.MapRoute(
    "Content",
    "Content/{TypeOfAction}",
    new {controller="Content", action="Index"},
    new {@"\b(Menus|Objectives|Pages|Topics)\b"}

);

假设您有一个带有Index动作的ContentController,它将TypeOfAction作为参数

处理

编辑答案: 正则表达式\b找到单词边界...没有测试它但应该工作... http://www.regular-expressions.info/wordboundaries.html http://www.regular-expressions.info/alternation.html