代码之家  ›  专栏  ›  技术社区  ›  Andrey

ASP.NET路由-路由约束和空路由

  •  0
  • Andrey  · 技术社区  · 15 年前

    我有一个要将路由映射到的URL:

    http://siteurl.com/member/edit.aspx?tab=tabvalue
    

    其中tabValue是“personal”、“professional”、“values”或“nothing”之一。

    我想把它映射到如下路径:

    Member/Edit/{tab}
    

    但我的问题是——我不知道如何指定这样的约束条件。我正在尝试这个regex:

    ^[personal|professional|values]{0,1}$
    

    但它只在我使用url时工作

    http://siteurl.com/member/edit/personal 
    

    -或

    http://siteurl.com/member/edit/professional 
    

    也不适用于

    http://siteurl.com/member/edit/
    

    关于如何指定正确的约束有什么想法吗?

    另外,我不使用MVC,只使用ASP.NET Web窗体

    谢谢!

    6 回复  |  直到 15 年前
        1
  •  2
  •   y34h    15 年前

    [ ] 用于字符集。

    使用 ( ) 相反

    ^(personal|professional|values){0,1}$

        2
  •  1
  •   Martin Peck    15 年前

    这可能不完全符合您的要求,但如果您构建这样的枚举…

    public enum TabValue
    {
        Personal,
        Professional,
        Values,
    }
    

    …把你的行为定义为…

    public ActionResult Edit(TabValue? tabvalue)
    {
        return View("Index");
    }
    

    …那么tabValue的可空值类型呢?将确保以下URL…

    …所有这些都为tabValue提供一个值(这里的大小写不是import),其中作为这些URL。

    …以空的tabValue点击您的操作。这项工作不需要特殊的路线。

        3
  •  0
  •   eglasius    15 年前

    尝试指定urlParameter的默认值。在选项卡的路由声明中是可选的。

    附言:这应该有效,但也许你必须明确地做上面的事情。

        4
  •  0
  •   ntziolis    15 年前

    试试这个:

    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}$"}}
           );
    }
    
        5
  •  0
  •   sTodorov    15 年前

    我以前使用过一个框架来完成这项工作。我不确定您是想使用框架,还是已经在使用框架,但请检查:

    http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

    我在一个网站上使用过它,它相对容易设置——所有规则都在web.config文件中指定,并且您在设计路由时有一定的自由度。

    希望有帮助

        6
  •  0
  •   Craig Celeste    15 年前

    考虑有3(或4)条路线。如果tab的值在运行时不是动态的,那么拥有3个静态路由比regex更干净。regex通常只在运行时有许多值时才有用,例如匹配数字、日期等。

    推荐文章