2012-02-20 46 views
2

我正在將具有4級目錄結構的網站轉換爲Visual Studio 2010中的MVC3。我發現的例子有{控制器}/{行動}/{ID}。需要MVC3項目的例子與4節目錄結構與可能的站點地圖使用

思考的目錄結構水平的部分,我需要做的是處理,看起來像這樣的結構: mysite.com/{section1}/{section2}/{section3}/{section4}

索引文件將位於每個部分,按照部分和目錄的介紹進行操作。我預計目前還沒有超出第4部分的任何網頁。

我偏好使用XML站點地圖,並編寫一些代碼塊來處理來自該站點地圖的各種頁面目錄結構。我已經使用WebForms成功完成了這個任務,但是真的想用MVC3來完成。我錯過的大件作品就是一個很好的例子。

現在我甚至不能把它路由到Section2。這是在我的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/)。但是,當我進入第2節(HTTP://本地主機:123/SECTION1 /第2節)時,出現這樣的錯誤:

視圖「第2節/」或它的主人沒有被發現或沒有視圖發動機 支持搜索位置。以下位置分別爲: 〜/ Views/section1/Section2/.aspx 〜/ Views/section1/Section2/.ascx〜/ Views/Shared/Section2/.aspx 〜/ Views/Shared/Section2/.ascx〜 /Views/section1/Section2/.cshtml 〜/查看/ SECTION1 /第2節/ .vbhtml〜/查看/共享/第2節/ .cshtml 〜/查看/共享/第2節/ .vbhtml

我希望這一切都有道理。如果有更好的方法來解決這個問題,請告訴我。

我目前的問題是讓這個導航到每個部分(1,2,3和4)的索引頁面,並在第1部分有一個控制器。如果這是不可能的,那麼解決這個問題的有效方法是什麼?無論哪種方式,我可能需要看到一個代碼示例。

其次,是否有一個體面的方式來利用MVC3網站上的網站地圖?如果是這樣,我會用什麼方法?

感謝您的幫助。

+0

您的默認路由應該是百達在映射結束時,嘗試 – cpoDesign 2012-02-20 08:34:56

回答

1

與路線的問題是,它的缺省路由之後。 MVC將停在匹配的第一條路線上,這將始終是默認設置。您需要先將其移到集合中的默認路由上方,方法是首先聲明它。

如果這些部分是固定的,那麼您可以完全通過路由來解決您的問題。這很容易做到。

基於控制器的解決方案無法正常工作的原因是因爲您試圖將ID作爲視圖名稱的一部分傳遞。這不是它的工作原理。你會做這樣的事情:

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

您還可以創建領域,這將創建一個在其中完成MVC網站小節。區域是一個很棒的功能,但可能並不完全是你想要的。

還有便攜式區域,它允許您將區域分離到自己的組件,從而他們自己的項目。

您還可以使用稱爲「slug」的解析您自己的URL來解析控制器名稱後面的任何內容。

關於網站地圖,你可以試試這個

https://github.com/maartenba/MvcSiteMapProvider