我有一个网址,我想将路由映射到:
http://siteurl.com/member/edit.aspx?tab=tabvalue
其中tabvalue是以下之一:“个人”,“专业”,“价值”或无。
我想将它映射到以下路线:
Member/Edit/{tab}
但我的问题是 - 我不知道如何指定这样的约束。我正在尝试这个正则表达式:
^[personal|professional|values]{0,1}$
但它只在我使用网址
时才有效http://siteurl.com/member/edit/personal
- 或 -
http://siteurl.com/member/edit/professional
并不适用于
http://siteurl.com/member/edit/
如何指定正确的约束?
P.S。我没有使用MVC,只是asp.net WebForms
谢谢!
答案 0 :(得分:2)
[ ]
用于字符集。
使用( )
代替
^(personal|professional|values){0,1}$
答案 1 :(得分:1)
这可能不太符合您的要求,但是如果您构建一个这样的枚举......
public enum TabValue
{
Personal,
Professional,
Values,
}
...并将您的行动定义为......
public ActionResult Edit(TabValue? tabvalue)
{
return View("Index");
}
...然后是TabValue的可空值类型?将确保以下网址......
...都为tabvalue提供了一个值(这里的外壳不是导入的),这些网址就是这样的..
...使用tabvalue为null来执行您的操作。不需要特殊的路由来完成这项工作。
答案 2 :(得分:0)
尝试在标签的路由声明中指定UrlParameter.Optional的默认值。
PS。它应该工作,但也许你必须明确地做上述
答案 3 :(得分:0)
试试这个:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("",
"Member/Edit/{tab}",
"~/member/edit.aspx",
true,
new RouteValueDictionary
{{"tab", ""}},
new RouteValueDictionary
{{"tab", "^[personal|professional|values]{0,1}$"}}
);
}
答案 4 :(得分:0)
我之前使用过一个框架来执行此操作。我不确定你是否想要使用一个框架,或者你是否已经使用了一个框架但是要检查一下:
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
我在网站上使用它,设置相对容易 - 所有规则都在web.config文件中指定,并且您可以自由地设计路线。
希望有所帮助
答案 5 :(得分:0)
考虑有3条(或4条)路线。如果{tab}的值在运行时不是动态的,则具有3个静态路由比正则表达式更清晰。正则表达式通常仅在运行时有许多值时才有用,例如匹配数字,日期等。