ASP.Net MVC2 - 注册删除“索引”的路由

时间:2010-11-02 17:39:32

标签: asp.net asp.net-mvc-2 routes

我有一条以标准形式正常运作的路线:

{控制器} / {行动} / {ID}

示例真实URL是:

http:// mydomain / Project / Index / PRJ2010001

我想从网址中删除“索引”,以便用户输入:

http:// mydomain / Project / PRJ2010001

...仍会呈现索引视图。

请注意,我的ProjectID始终以“PRJ”

开头

问题:

1)如何在Global.asax.cs文件中注册此路由?

2)如何使用Url.Action()在视图中生成正确的链接(减去“索引”)?

这就是我的尝试:

routes.MapRoute(
            "View Project",
            "Project/{id}",
            new { controller = "Project", action = "Index" },
            new { id = @"/^PRJ/" }      //regex constrains this route to only work if {id} begins with "PRJ"
        );

2 个答案:

答案 0 :(得分:2)

MVC与你的正则表达式混淆,以确保模式匹配整个值而不仅仅是部分。具体来说,确实......

string pattern = "^(" + str + ")$";
return Regex.IsMatch(input, pattern, RegexOptions.CultureInvariant
                                     | RegexOptions.IgnoreCase);

所以你的正则表达式被测试为^(/^PRJ/)$,这是无稽之谈。传入"PRJ\\d+"应该有效。

在这种特殊情况下,我会考虑删除正则表达式,并在URL模式中包含PRJ ......

routes.MapRoute(
        "View Project",
        "Project/PRJ{id}",
        new { controller = "Project", action = "Index" }
    );

...虽然你的行动将不得不处理收到没有前缀的ID。

答案 1 :(得分:1)

我认为问题可能出在你的正则表达式上。只需"PRJ\w+""PRJ\d+"

即可

我甚至在没有正则表达式的情况下尝试确保其他一切正常。