ASP.Net MVC2 - регистрация маршрута для удаления «индекса» - PullRequest
1 голос
/ 02 ноября 2010

У меня есть маршрут, который работает правильно в форме стандарта:

{контроллер} / {действие} / {ID}

Пример реального URL:

http: // mydomain / Project / Index / PRJ2010001

Я бы хотел удалить «Индекс» из URL, чтобы при вводе пользователем:

http: // mydomain / Project / PRJ2010001

... индексное представление по-прежнему отображается.

Обратите внимание, что мой ProjectID всегда начинается с "PRJ"

Вопросы:

1) Как мне зарегистрировать этот маршрут в моем файле Global.asax.cs?

2) Как мне сгенерировать правильную ссылку (за исключением «индекса») в моих представлениях с помощью Url.Action ()?

Вот что я пробовал:

routes.MapRoute(
            "View Project",
            "Project/{id}",
            new { controller = "Project", action = "Index" },
            new { id = @"/^PRJ/" }      //regex constrains this route to only work if {id} begins with "PRJ"
        );

Ответы [ 2 ]

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

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

string pattern = "^(" + str + ")$";
return Regex.IsMatch(input, pattern, RegexOptions.CultureInvariant
                                     | RegexOptions.IgnoreCase);

так что ваше регулярное выражение проверено как ^(/^PRJ/)$, что является бессмысленным. Передача в "PRJ\\d+" должна работать.

В этом конкретном случае я бы хотел исключить регулярное выражение и просто включить PRJ в шаблон URL ...

routes.MapRoute(
        "View Project",
        "Project/PRJ{id}",
        new { controller = "Project", action = "Index" }
    );

... хотя тогда вашему действию придется иметь дело с получением идентификатора без префикса.

1 голос
/ 02 ноября 2010

Я думаю, что проблема может быть в вашем регулярном выражении. Попробуйте просто "PRJ\w+" или "PRJ\d+"

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

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