Asp.net Routing - ограничения маршрута и пустой маршрут - PullRequest
0 голосов
/ 24 сентября 2010

У меня есть URL, к которому я хочу привязать маршрутизацию:

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

где tabvalue является одним из: "личный", "профессиональный", "ценности" или ничего

Я хочу сопоставить его с маршрутом, подобным:

Member/Edit/{tab}

Но моя проблема в том, что я не знаю, как указать такие ограничения. Я пытаюсь это регулярное выражение:

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

но это работает только когда я использую URL

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

-или-

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

и не работает для

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

Есть идеи, как указать правильное ограничение?

P.S. Я не использую MVC, просто asp.net WebForms

Спасибо!

Ответы [ 6 ]

2 голосов
/ 01 ноября 2010

[ ] для набора символов.

используйте ( ) вместо

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

1 голос
/ 27 октября 2010

Возможно, это не совсем соответствует вашим требованиям, но если вы создадите перечисление, подобное этому ...

public enum TabValue
{
    Personal,
    Professional,
    Values,
}

... и определите свое Действие как ...

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

... тогда обнуляемый тип значения TabValue? будет гарантировать, что следующие URL-адреса ...

... все предоставляют значение для tabvalue (и здесь регистр не импортируется), где в качестве этих URL-адресов ..

... поразите ваше действие табулатурой нуля. Для этой работы не требуется никакой специальной маршрутизации.

0 голосов
/ 01 ноября 2010

Рассмотрим 3 (или 4) маршрута. Если значение {tab} не является динамическим во время выполнения, наличие 3 статических маршрутов чище, чем регулярное выражение. Регулярное выражение обычно полезно, только когда во время выполнения есть много значений, таких как совпадение числа, даты и т. Д.

0 голосов
/ 31 октября 2010

Я использовал один фреймворк, прежде чем сделать это. Я не уверен, хотите ли вы использовать фреймворк или уже используете его, но проверьте это:

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

Я использовал его на веб-сайте, его относительно легко настроить - все правила указаны в файле web.config, и у вас есть определенная свобода при разработке маршрутов.

Надеюсь, это поможет

0 голосов
/ 26 октября 2010

Попробуйте это:

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}$"}}
       );
}
0 голосов
/ 24 сентября 2010

попробуйте указать значение по умолчанию UrlParameter.Optional в объявлении маршрута для вкладки.

ps.это должно сработать, но, возможно, вам придется делать вышеуказанное явно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...