Asp.net路由 - 路由约束和空路由

时间:2010-09-24 15:52:55

标签: asp.net routing webforms url-routing constraints

我有一个网址,我想将路由映射到:

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

谢谢!

6 个答案:

答案 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个静态路由比正则表达式更清晰。正则表达式通常仅在运行时有许多值时才有用,例如匹配数字,日期等。

相关问题