Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC Url.Action在服务器中呈现的Url参数与在本地中呈现的不同_C#_Asp.net Mvc 3_Razor_Web - Fatal编程技术网

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

C# MVC Url.Action在服务器中呈现的Url参数与在本地中呈现的不同,c#,asp.net-mvc-3,razor,web,C#,Asp.net Mvc 3,Razor,Web,形势 我正在使用MVC3,并且在两个地方拥有相同的应用程序副本:本地IIS和远程服务器IIS 我有一个视图a,它使用Html.RenderAction呈现另一个局部视图B。然后,视图B在点击事件上设置了一个ajax帖子,其url由url.Action生成。 该Url有两个路由参数“lol”和“woot” 下面是: 查看A @{ Html.RenderAction('MyAction'); } 视图B $('#NiceButton').on('click', function() {

形势

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

我有一个视图a,它使用
Html.RenderAction
呈现另一个局部视图B。然后,视图B在点击事件上设置了一个ajax帖子,其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
        });
    });
    
  • 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代码。

使用url,即
。/Controller/view?参数,而不是直接使用@url.action


你必须把
。/
放在控制器前面;这将解决问题。

您能显示路由配置吗?添加了路由配置。嗯。。。这真的很奇怪。看起来调用的是
Default
,而不是
Actions
。您是否检查了服务器上的
RouteData
?您可以使用。我确认正在调用默认值,因为我尝试删除默认值并将操作重命名为默认值。在我的本地服务器上,它运行得很好,但在服务器上它崩溃了,说它找不到要使用的路由,这意味着出于某种原因,它使用参数跳过了默认值。我完全搞不懂为什么这在另一台服务器上表现不同。。。我现在就试试RouteDebugger,谢谢你的提示!我试了一下那个叫RouteDebugger的家伙。看起来,如果启用了它,操作路径会工作,但如果禁用了它,则不会工作。可能是因为此dll添加的“捕获所有”路由。无论如何,这确认了由于某种原因没有选择操作。