2

情况

我正在使用 MVC3 并在两个地方拥有我的应用程序的完全相同的副本:我的本地 IIS 和远程服务器 IIS。

我有一个视图A使用Html.RenderAction. 然后,视图 B 在单击事件上设置了一个 ajax POST,其 url 由Url.Action. 该 Url 有两个路由参数"lol""woot".

它是这样的:

  • 查看 A

    @{ Html.RenderAction('MyAction'); }
    
  • 视图 B

    $('#NiceButton').on('click', function() {
        $.ajax({
            type: "POST",
            url: "@Url.Action("AwesomeAction", "SuperController", ViewContext.RouteData.Values)",
            data: {
                someArray: someDataArray
            }
        }).done(function() {
            // Some beautiful actions go here
        });
    });
    
  • 全球.asax

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            "SomeRoute1",
            "SomeRoute1/{p1}/{p2}",
            new {controller = "Controller1", action = "Action1", p1 = UrlParameter.Optional, p2 = UrlParameter.Optional}
            );
    
        routes.MapRoute(
            "SomeRoute2",
            "SomeRoute2/{p1}/{p2}/{p3}/{p4}",
            new {controller = "Controller2", action = "Action1", p1 = UrlParameter.Optional, p2 = UrlParameter.Optional, p3 = UrlParameter.Optional, p4 = UrlParameter.Optional}
            );
    
        routes.MapRoute(
            "SomeRoute3",
            "SomeRoute3/{p1}/{p2}",
            new {controller = "Controller3", action = "Action1", p1 = UrlParameter.Optional, p2 = UrlParameter.Optional}
            );
    
        routes.MapRoute(
            "Actions",
            "{controller}/{action}/{p1}/{p2}/{p3}/{p4}",
            new { controller = "Home", action = "Home", p1 = UrlParameter.Optional, p2 = UrlParameter.Optional, p3 = UrlParameter.Optional, p4 = UrlParameter.Optional}
        );
    
        routes.MapRoute(
            "Default",
            "{controller}/{action}",
            new { controller = "Home", action = "Home" }
        );
    }
    

问题

Url.Action 呈现的 URL 在两个服务器中是不同的。

我的 IIS 服务器完全呈现我想要的内容:

localhost/application/SuperController/AwesomeAction/lol/woot

但其他 IIS 服务器呈现

server/application/SuperController/AwesomeAction?p1=lol&p2=woot

问题

我在这里想念什么?IIS 中是否有任何配置会影响 Url.Action 生成 URL 的方式?

另请注意,第二个 Url 是错误的,因为它转义了 & 符号,因此当服务器接收到这个时,它会将第二个参数 key 视为“amp;p2”。

首先,我认为 System.Web.Mvc.dll 可能不同,但后来我还在两个应用程序 bin 文件夹中包含了相同的 dll。我的意思是,这两个应用程序在两个地方都是完全相同的副本。

编辑:添加 Global.asax 代码。

4

1 回答 1

0

不要直接使用 @url.action ,而是使用 url ie ../Controller/view?parameter

您必须放在../控制器之前;这将解决问题。

于 2014-03-24T13:55:12.433 回答