我有一条以标准形式正常运作的路线:
{控制器} / {行动} / {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"
);
答案 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+"
我甚至在没有正则表达式的情况下尝试确保其他一切正常。