0

在我的 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 会改变?

4

2 回答 2

1

Url.Content(string contentPaht)使用该VirtualPathUtility.ToAbsolute(string contentPath)方法创建一个绝对url:

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不以 a 开头时,它会在不使用该方法~的情况下返回 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 }
);
于 2012-04-12T07:25:10.113 回答
0

因为在服务器上应用程序具有虚拟路径“mvcapplication”,即应用程序驻留在 IIS 中的虚拟目录“mvcapplication”中。它与 asp.net mvc 无关,它是一个 IIS 设置。

于 2012-04-12T06:27:45.037 回答