2011-03-01 89 views
1

我在Google上搜索過(可能是關鍵詞錯誤)並訪問了ASP.NET/MVC網站的教程。但沒有正確理解MVC的路由。 我有一個下圖的場景。我想在網站發佈時顯示Index.cshtml。

enter image description here子文件夾中的ASP.NET MVC自定義路由

我以各種方式更改了Global.asax.cs文件的RegisterRoutes方法。最新的代碼(不工作)低於

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

我會很高興,如果有人解釋了圖路線方法與不同的例子有回答我的問題一起。

回答

1

ASP.NET MVC 3有一個內置的子文件夾功能。這就是所謂的區域(感謝@Morten讓我知道這個詞)。
但是在爲區域完成MSDN Walkthrough之後,我仍然無法運行該Web應用程序。錯誤顯示爲配置錯誤。 @丹尼也注意到了這一點。
然後我搜索了一下,發現網頁爲。子文件夾中的配置文件不應包含特定於應用程序的屬性
因此,我從Web.config文件中刪除了這些屬性。然後我就可以跑步了。但是當我想要導航到我的子文件夾/區域視圖時,出現了一些運行時錯誤。錯誤是「無法加載類型」System.Web.Mvc.ViewPage < .. <>'「當我點擊鏈接的地區文件夾的意見。
然後我再次搜索,發現有幫助this後。然後我的應用程序成功運行,我可以瀏覽所有頁面。

+0

我的第一個編輯詢問你是否在@ Morten的評論前嘗試創建一個區域;)很高興你有一切工作。 – DannyLane 2011-03-02 09:52:47

+0

@Danny:兄弟,我當時不知道關鍵字。 :) – 2011-03-02 09:55:10

2

我不認爲問題出現在您的路線中,我相信這是由將視圖和控制器文件夾移動到App文件夾引起的。

MVC使用「約定優於配置」的東西,如文件夾所在的位置,我猜它不能在新文件夾中找到視圖/控制器?

here

因爲 默認 的ASP.NET MVC框架使用 辦法了「約定優於配置」,並提出了一些這些文件夾在 空的ASP.NET MVC應用程序,甚至包括默認 假設基於文件夾命名 約定。例如,控制器 在默認情況下在視圖文件夾中查找視圖 ,而您不必在代碼中明確指定此視圖 。 使用默認約定 可以減少您需要的代碼量,以便 寫入,並且還可以使其他開發人員更容易地瞭解您的 項目的 。

我不是說不可能擁有像你這樣的文件夾結構,我只是不相信它支持開箱即用。 我個人建議回到默認值,如果你需要保持這個結構,那麼我認爲你可能需要實現你自己的ControllerFactory和ViewEngine(我不確定這些是否是你需要改變的正確鉤子)。

編輯: 您是否試圖將App作爲區域來實現?

編輯2: 如果您試圖添加應用程序作爲一個區域有一些步驟,你需要遵循,原因我不知道這是你想要做的是因爲我認爲區域不得不存在於一個Areas文件夾中。 有一些步驟概述here包括如何註冊您的區域,如果這是你想要做的。

+0

該結構完全符合使用區域。編輯你的帖子,以顯示如何定義和註冊一個應用程序區域,並且你會得到我的滿意 - 除非有人擊敗你;) – 2011-03-01 14:22:14

+0

要使用這種類型的文件夾,你必須添加適當的控制器命名空間到defaultcontrollerfactory並創建一個自定義ViewEngine(從RazorViewEngine繼承)以查找正確的文件夾。也許你正在嘗試創建一個區域,如果你想使用像/ App/Home/ – 2011-03-01 14:26:15

+0

@Morten Mertner這樣的路線,這會更容易我認爲你必須在Areas文件夾中定義你的區域?這就是爲什麼我不確定其意圖是什麼。如果我對Areas文件夾不正確,請糾正我的錯誤? – DannyLane 2011-03-01 14:34:35