在我的MVC3 Razor应用程序中,我将布局页面中的ajax称为
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
当我在本地机器上运行它时,它工作得很好..但是在使用iis7发布后,我的ajax调用无效。当我在浏览器中选中查看源时,引用在发布前为<script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
,在发布后为<script src="mvcapplication/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
。我很困惑为什么url会改变?
答案 0 :(得分:1)
Url.Content(string contentPaht)
使用VirtualPathUtility.ToAbsolute(string contentPath)
方法创建绝对网址:
public string Content(string contentPath)
{
if (string.IsNullOrEmpty(contentPath))
{
throw new ArgumentException(MvcResources.Common_NullOrEmpty, "contentPath");
}
if (contentPath[0] == '~')
{
return VirtualPathUtility.ToAbsolute(contentPath,
this.RequestContext.HttpContext.Request.ApplicationPath);
}
return contentPath;
}
如您所见,使用了Request.ApplicationPath
,它代表了虚拟目录。
当参数contentPath
不以~
开头时,它会返回contentPath而不使用ToAbsolute(string contentPath)
方法。
所以你可以尝试使用:
@Url.Content("/Scripts/jquery.unobtrusive-ajax.js")
修改:您还可以尝试更改默认路线:
routes.MapRoute(
"Default",
"NameVirtualDirectory/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 1 :(得分:0)
因为在服务器上应用程序具有虚拟路径“mvcapplication”,即该应用程序驻留在虚拟目录“mvcapplication”中的IIS中。它与asp.net mvc无关,它是一个IIS设置。