MVC Url.Action呈现服务器中的URL参数与本地不同

时间:2013-07-31 03:52:40

标签: c# asp.net-mvc-3 razor web

情况

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

我有一个视图 A ,使用Html.RenderAction呈现另一个部分视图 B 。然后,视图B在点击事件上设置了ajax POST,其中Url.Action生成了网址。 该网址有两个路由参数"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
        });
    });
    
  • Global.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是错误的,因为它会转出&符号,因此当服务器收到此符号时,它会将第二个参数键视为“amp; p2”。

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

编辑:添加了Global.asax代码。

1 个答案:

答案 0 :(得分:0)

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

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