在子域中运行ASP.NET MVC会导致Html.ActionLink生成错误的链接

4
我正在子域中运行MVC
http://test.domain.com 指向我的webhost4life账户上/Test目录。
Html.ActionLink("About", "About", "Home")

它渲染一个链接到

http://test.domain.com/Test/Home/About -- 这个链接会返回404错误

正确的链接应该是...

http://test.domain.com/Home/About

有没有一种方法可以重载ActionLink以在呈现时省略/Test?

谢谢


实验1

我像这样向表中添加了一条路由...

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

现在的操作链接渲染出的链接看起来像这样: http://test.domain.com/Test/Test/Home/About/ 当点击它时,不会跳转到404页面,而是打开Home控制器下的About动作。

结果:

不再有损坏的链接,但网站呈现的URL不美观。


它应该已经按照你想要的方式工作了。但显然它没有...我怀疑你的描述中有些东西是缺失的。 - Scrappydog
应用程序的根文件夹是什么?看起来它坐落在根目录而不是您的子文件夹中。 - David Perlman
文件已复制到/Test目录。在webhost4life iis管理控制台中, /Test文件夹已被设置为应用程序目录, /Test文件夹也被设置为虚拟目录(当它被设置为应用程序目录时会自动发生)。在子域指向管理器中, 子域test.domain.com指向/Test谢谢。 - eiu165
1个回答

0
对于使用大量子域的网站,我使用了ITCloud的一个巧妙的MVC扩展UrlRouteAttribute。它允许您将路由分配给每个操作作为属性设置路径和名称。我已经扩展了这个功能,以允许完全限定的路径 - 因此要包括控制器应该附加到的域/子域。如果您对此感兴趣,我可以在某个地方上传副本。

制作路由看起来非常简单。我在这里 http://itcloud.codeplex.com/ 看了一下,感觉不错。如果你有示例可以发布,我很想看看。 - eiu165

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接