情况
我正在使用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代码。
答案 0 :(得分:0)
不要直接使用@ url.action,而是使用网址../Controller/view?parameter
。
您必须将../
放在控制器之前;这将解决问题。