IIS6上的MVC - “主页”链接无法正常工作

时间:2009-10-19 18:45:50

标签: iis-6 asp.net-mvc-routing

我正在运行IIS6的Web服务器上部署MCV 1.0项目。 (不是我的选择)我通过史蒂夫桑德森的文章Here和菲尔哈克的文章,但我仍然有问题。

现在我正试图从Steve Sandersons的文章中实现选项2。我遇到的主要问题是Home链接无法正确呈现。对于Instance,在我的站点地图中,我有以下内容:

<%= Html.ActionLink("Home", "Index", "Home") %> 

这会在页面上呈现http://servername/JCIMS_Orange/Home.mvc这是不正确的。

不管这个链接:

<%= Html.ActionLink("About", "About", "Home") %>

呈现为...... http://servername/JCIMS_Orange/Home.mvc/About,这是正确的

我的Global.asax RegisterRoutes功能如下:

        public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}.aspx/{action}/{id}",                      // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

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

有谁能告诉我为什么我的主页链接无法正确呈现?我在WinXP上运行的localhost和运行Win2003 Server的Web服务器上都重复了这个错误。

感谢任何建议或指示

2 个答案:

答案 0 :(得分:1)

为什么http://servername/JCIMS_Orange/Home.mvc不正确?你期待它是什么?

编辑:路由定义中的参数默认值告诉系统路由中不需要索引。您可以尝试将action参数default设置为空字符串。这应该强制通过Html.ActionLink生成的URL包括动作名称,即使对于索引操作也是如此。

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

但是,我不认为这是最好的解决方案。如果你的图像和css没有动作名称就无法工作,那么听起来你没有正确引用路径。你能提供一个你的图像链接的例子,也许你的css文件链接?如果看不到它们的样子,我可以建议它们应该以“/".

开头

您需要修复这些链接,以便在使用包含id参数的路径网址时,它们也适用于该实例。 (例如http://servername/JCIMS_Orange/Products.mvc/Details/5

编辑2 :由于您的网站包含在子文件夹中,因此您需要在图片和css路径中包含该子文件夹。使用“/”开始相对URL意味着它就在服务器名称之后。使用“../”表示它相对于当前路径,正如您所见,它不适用于默认的MVC路由,因为对于不同的操作,您的URL具有不同数量的元素。

包含子文件夹路径应该在每种情况下都能正常运行。像这样:

<img src="/JCIMS_Orange/Content/images/JCIMS_Banner.png" alt="JCIMS Banner" />

答案 1 :(得分:0)

丹尼斯,

感谢您的回复。在你的回答和更多的游戏之间,我能够让我的CSS工作。

我在Global.asax文件中使用了这个

   routes.MapRoute(
               "Default",
               "{controller}.aspx/{action}/{id}",
               new { controller = "Home", action = "", id = "" }
             );

        routes.MapRoute(
          "Root",
          "",
          new { controller = "Home", action = "", id = "" }
        );

另外,我必须在每个View文件中使用CSS链接。并且图形必须使用../像这样...

<img src="../Content/images/JCIMS_Banner.png" alt="JCIMS Banner" />

现在看来一切正常。谢谢你的帮助。

-MARK -