Нужен пример проекта MVC3 с 4-х секционной структурой каталогов с возможностью использования карты сайта - PullRequest
2 голосов
/ 20 февраля 2012

Я работаю над преобразованием веб-сайта с четырехуровневой структурой каталогов в MVC3 в Visual Studio 2010. В найденных примерах есть маршруты с {controller} / {action} / {id}.

Думая об уровнях структуры каталогов как о секциях, мне нужно обработать структуру, которая выглядит следующим образом: mysite.com/ enjsection1 broadcast/ndomsection2 broadcast/ndomsection3‹/ndomsection4 enj

Индексный файл будет в каждом разделе, действуя, как во введении в раздел и каталог.В настоящее время я не ожидаю каких-либо веб-страниц за пределами уровня раздела 4.

Я бы предпочел использовать карту сайта XML и написать некоторый блок кода для обработки различных структур каталогов страниц из этого.карта сайта.Я сделал это успешно с WebForms, но очень хочу сделать это с MVC3.Большой кусок, который я пропускаю, является хорошим рабочим примером этого.

Прямо сейчас я даже не могу получить это, чтобы направить в Раздел 2.Это в моем Global.asax.

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute("",
            "Section1/{controller}/{action}/{id}",
            new { controller = "Section1", action = "Index", id = UrlParameter.Optional }
        );
    }

Это в моем контроллере Section1.

public class Section1Controller : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Section2(string id)
    {
        return View("Section2/" + id);
    }
}

Я могу успешно перейти к Section1 (то есть http://localhost:123/section1/). Но когда явведите Section2 (http://localhost:123/section1/section2), появляется эта ошибка:

Представление 'Section2 /' или его мастер не найдены или ни один механизм представления не поддерживает найденные местоположения. Были найдены следующие местоположения: ~ / Views /section1 / Section2 / .aspx ~ / Views / section1 / Section2 / .ascx ~ / Views / Shared / Section2 / .aspx ~ / Views / Shared / Section2 / .ascx ~ / Views / section1 / Section2 / .cshtml ~ / Views /section1 / Section2 / .vbhtml ~ / Views / Shared / Section2 / .cshtml ~ / Views / Shared / Section2 / .vbhtml

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

Моя непосредственная проблема состоит в том, чтобы заставить это перейти к странице индекса для каждого из разделов (1, 2, 3 и 4), с контроллером на уровне раздела 1Если это невозможно, каков эффективный способ приблизиться к этому?d чтобы увидеть пример кода.

Во-вторых, есть ли достойный способ использования карты сайта на сайте MVC3?Если да, то какой подход я бы использовал?

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

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

Вы можете полностью решить проблему с маршрутизацией, если разделы зафиксированы.Это довольно легко сделать.

Причина, по которой ваше решение на основе контроллера не сработало, заключается в том, что вы пытались передать идентификатор как часть имени представления.Это не так, как это работает.Вы могли бы сделать что-то вроде этого:

public ActionResult Section2(string id) 
{ 
    return View("Section2", new { id=id }); 
} 

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

Есть также переносимые области, которые позволяют разделять области на их собственные сборки и, следовательно, на собственные проекты.

Вы также можете проанализировать свой собственный URL-адрес, используя так называемый "slug", для анализа любого контента, который идет после имени контроллера.

Что касается Sitemap, вы можете попробовать это

https://github.com/maartenba/MvcSiteMapProvider

0 голосов
/ 20 февраля 2012

Я думаю, вам нужны Ареасы ... http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas

...