У меня есть 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
Спасибо!
[ ] для набора символов.
[ ]
используйте ( ) вместо
( )
^(personal|professional|values){0,1}$
Возможно, это не совсем соответствует вашим требованиям, но если вы создадите перечисление, подобное этому ...
public enum TabValue { Personal, Professional, Values, }
... и определите свое Действие как ...
public ActionResult Edit(TabValue? tabvalue) { return View("Index"); }
... тогда обнуляемый тип значения TabValue? будет гарантировать, что следующие URL-адреса ...
... все предоставляют значение для tabvalue (и здесь регистр не импортируется), где в качестве этих URL-адресов ..
... поразите ваше действие табулатурой нуля. Для этой работы не требуется никакой специальной маршрутизации.
Рассмотрим 3 (или 4) маршрута. Если значение {tab} не является динамическим во время выполнения, наличие 3 статических маршрутов чище, чем регулярное выражение. Регулярное выражение обычно полезно, только когда во время выполнения есть много значений, таких как совпадение числа, даты и т. Д.
Я использовал один фреймворк, прежде чем сделать это. Я не уверен, хотите ли вы использовать фреймворк или уже используете его, но проверьте это:
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
Я использовал его на веб-сайте, его относительно легко настроить - все правила указаны в файле web.config, и у вас есть определенная свобода при разработке маршрутов.
Надеюсь, это поможет
Попробуйте это:
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}$"}} ); }
попробуйте указать значение по умолчанию UrlParameter.Optional в объявлении маршрута для вкладки.
ps.это должно сработать, но, возможно, вам придется делать вышеуказанное явно