2011-06-09 86 views
1

我正在本地計算機上開發一個ASP.MVC 3項目,它位於本地Web服務器的根目錄。將ASP.MVC 3應用程序部署到子文件夾(而不是根目錄)時,如何處理路線?

localhost:12345/(project is here) 

然而,當我部署到我們的公共Web服務器上該應用程序將位於子文件夾

www.mycompany.com/myapp/(project goes here) 

我該如何處理與不匹配?有幾個問題想到:

  1. 我是否需要調整我的MVC路由?或者他們會在/ myapp /後捕獲任何東西?

  2. 當我不想在路由中出現「主頁」時,是否使用HomeController?即/ myapp/home /(action)/(id) - 而是我想要這個:/ myapp /(action)/(id)如果Home是控制器。

  3. 我應該在本地機器上匹配這個文件夾結構嗎? (這個項目將永遠不會訪問'myapp'文件夾以外的任何東西)

  4. 如果3是肯定的,怎麼樣?

我在本地使用VS 2010與IIS Express。

+0

你可以放一些你的路線嗎?並確認子文件夾是否爲虛擬目錄。 – 2011-06-09 21:53:05

+0

我沒有更改默認的ASP.MVC 3項目路線,但是如果你想我可以發佈它們。 – 2011-06-09 22:03:28

回答

2
  1. 這些路由是相對於Web應用程序。這意味着你不需要在你的路線中有/ myapp /。
  2. 不,您不需要在路線中顯示首頁。就個人而言,我會採取默認路線。
  3. 不,你不需要匹配這個文件夾結構。
+0

這就是我喜歡聽到的! :-)我必須做更多的測試,然後才能確認這是答案。關於默認路線的好主意。 – 2011-06-09 22:04:33

+0

你如何從#2的路線中取出家? – 2011-07-14 22:13:27

2

根據我們的經驗,我發現在控制器內部沒有路由問題。但是,如果在視圖中使用HTML助手(如Html.BeginForm或Html.Action),則這些方法對於接收控制器,操作參數的重載方法不起作用。你需要把使用Url.Content在HTML輔助整個URL,

這不起作用:

Html.BeginForm() 

Html.BeginForm("ResetPassword", "Account") 

但這個工程:

Html.BeginForm(Url.Content("~/Account/ResetPassword"); 
相關問題