маршрут для отражения иерархической структуры URL / меню - PullRequest
1 голос
/ 16 января 2012

Я создал базовый веб-сайт mvc3, в котором каждый контроллер представляет первую папку в структуре URL.

например, папки «еда» и «напитки» ниже являются контроллерами. есть только два контроллера, которые содержат все подпункты в них.

т.е. в первой строке примера, контроллер = еда, метод = азиат

во второй строке контроллер = еда, метод = пад-тай и так далее и тому подобное.

www.mysite.com / еда / Азия / www.mysite.com/food/asian/pad-thai www.mysite.com/food/italian/chicken-parmigiana www.mysite.com/drinks/cocktails/bloody-mary

как мне написать маршруты, чтобы www.mysite.com/food/asian/pad-thai перенаправлял к контроллеру еды и платному тайскому методу в этом контроллере, а также имел правило для отправки с www.mysite. com / еда / азиатская / к контроллеру продуктов питания и метод азиатских индексов ??

1 Ответ

3 голосов
/ 16 января 2012

Шаблон проектирования MVC не предназначен для переписывания URL-адресов для указания на структуры папок. Это может сделать это, но это, конечно, не его главная цель. Если вы пытаетесь создать структуру URL со статическим содержимым, может быть проще использовать перезапись URL , встроенную в IIS.

Если вы создаете полноценное приложение MVC, настройте FoodController и DrinkController для обслуживания ваших представлений, например:

public class FoodController : Controller
{
  public ActionResult ViewDishByTag(string itemType, string itemTag)
  {

    // If an itemType is displayed without itemTag, return an 'index' list of possible dishes...

    // Alternatively, either return a "static" view of your page, e.g.
    if (itemTag== "pad-thai") 
         return View("PadThai"); // where PadThai is a view in your shared views folder

     // Alternatively, look up the dish information in a database and bind return it to the view
     return ("RecipeView", myRepo.GetDishByTag(itemTag));
  }
}

Используя приведенный выше пример, ваш маршрут может выглядеть примерно так:

routes.MapRoute(
                "myRoute",
                "{controller}/{itemType}/{itemTag}",
                new
                {
                    controller = UrlParameter.Required,
                    action = "ViewDishByTag",
                    itemtype = UrlParameter.Optional,
                    itemTag = UrlParameter.Optional
                }
            );

В вашем вопросе нет подробной информации о вашей реализации, поэтому, если вы хотите, чтобы я что-то рассказал, обновите ваш вопрос.

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