情况
我正在使用 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 代码。