C# MVC Url.Action在服务器中呈现的Url参数与在本地中呈现的不同
形势 我正在使用MVC3,并且在两个地方拥有相同的应用程序副本:本地IIS和远程服务器IIS 我有一个视图a,它使用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() {
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" } ); }
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添加的“捕获所有”路由。无论如何,这确认了由于某种原因没有选择操作。