1

我看到开发机器和部署服务器之间的 Url.RouteUrl 输出存在差异。我正在运行 Visual Studio 2008,我的部署框是 Windows 2003 Server。我已将 Global.asax.cs 配置为在路由表中使用 .aspx 扩展名运行。但是,当我使用“Search-Basic”命名路由时,Url.RouteUrl("Search-Basic", new {category = "Test", searchExpression = "search this"}) 没有输出

查看代码:

<%= Url.RouteUrl("Search-Basic", new {category = "test", searchExpression="search this"}) %>

Global.asax.cs 代码:

            // routes for IIS 6 and version below
        routes.MapRoute(
            "Search-Basic",
            "Search.aspx/Basic/{category}",
            new { controller = "Search", action = "Basic", category = "All" }
            );

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

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

在我的开发框中,我得到了预期的输出:/Search.aspx/Basic/Test?searchExpression=search%20this

但是,在我的部署服务器上,我根本没有得到任何输出。一个区别可能是我在部署服务器上的虚拟目录中运行应用程序。类似于:http : //testmachine.com/sm/testappname/ 其中“/sm”是一个虚拟目录,“/testappname”是一个包含我的应用程序的虚拟目录。

有任何想法吗?

非常感谢你。

4

1 回答 1

1

您是否正在运行相同版本的 ASP.NET MVC,因为 RC1(非刷新)中存在一个错误,当您有一个未在路由中指定控制器的路由时会导致此行为:

另一个回归是,在某些情况下,当您指定路由名称时,RouteUrl(以及因此 RouteLink)方法返回一个空字符串,但该路由具有默认参数,而不是 URL 中的参数。

例如,如果您有以下路线:

routes.MapRoute("route-name", "foo/bar", new {controller="Home", action="index"});

请注意,控制器具有默认值,但不是 URL 的一部分。如果您随后指定:

<%= Url.RouteUrl("route-name") %>

您可能期望它会使用该路由来呈现 URL,但事实并非如此。当我们重构所有生成 url 的助手以调用一个通用方法时,就会引入这个错误。然而,事实证明,我们的 RouteUrl 方法(也称为非 MVC 特定方法)应该具有与 MVC 特定方法(例如 Action)略有不同的行为。我们在通用方法中添加了一个标志,以便考虑到这种差异。这是一个没有大表面积的修复程序。

请参阅http://haacked.com/archive/2009/01/30/aspnetmvc-refresh.aspx

于 2009-02-13T21:22:39.993 回答