2011-06-09 47 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"); 
相关问题