Проблема выяснения маршрутов. Карта для этого URL (C #) - PullRequest
1 голос
/ 07 октября 2010

Несмотря на обилие постов о маршрутизации URL, я еще не достиг просветления по этому вопросу.

У меня есть приложение MVC, которое отлично работает, но я хочу придумать и немного переписать URL, чтобы облегчить работу для моих пользователей.

Маршрут по умолчанию - это небольшое отличие от обычного:

routes.MapRoute(
      "Default",
      "{controller}/{action}/{query}",
      new{ controller = "SomeController", action="Index", query = "" });

Я хочу перенаправить URL-адрес http://mysite.com/12345 на действие Details SomeController с запросом 12345.Я попытался это сделать:

routes.MapRoute(
      "DirectToDetails",
      "{query}",
      new{ controller = "SomeController", action="Details" query="" });

routes.MapRoute(
      "Default",
      "{controller}/{action}/{query}",
      new{ controller = "SomeController", action="Index", query = "" });

, но в конечном итоге это скрывает http://mysite.com/, и он переходит к SomeController / Details вместо SomeController / Index.* по совету @Jon я удалил запрос = "" в анонимном объекте:

routes.MapRoute(
      "DirectToDetails",
      "{query}",
      new{ controller = "SomeController", action="Details" });

..., который отвечал на вопрос;теперь, когда я отправляю форму в Views / SomeView / Index (которая передает вышеупомянутый SomeController / Details), я получаю ошибку "ресурс не найден".

Вот объявление формы:

<% using (Html.BeginForm(
              "Details", 
              "SomeController", 
              FormMethod.Post, 
              new { id = "SearchForm" })) { %>
    <% Html.RenderPartial("SearchForm", Model); %>
    <%= Html.ValidationMessageFor(model => model.Query) %>
<% } %>

1 Ответ

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

Удалите query = "" (очевидно, это не является обязательным именно из-за проблемы, которую вы имеете - не нужно указывать ее в 3-м аргументе, если нет разумного значения по умолчанию) и используйте перегрузку MapRoute, которая занимает 4-е параметр с ограничениями маршрута:

routes.MapRoute(
  "DirectToDetails",
  "{query}",
  new { controller = "SomeController", action="Details" },
  new { query = @"\d+" });

Очевидно, вам нужно настроить регулярное выражение, если оно не является целым числом ...


В ответ на ваши изменения ... убедитесь, что вы удалили значение по умолчанию для запроса из "короткого" маршрута - вы разместили его по умолчанию. Также предложите вам дважды проверить форму и убедиться, что она публикует значение для query (может быть, установить точку останова для метода после действия и убедиться, что параметр запроса привязан правильно?).

...