2012-04-12 55 views
0

在我MVC3剃刀申请后,我在布局页提到阿贾克斯@ Url.Content变化发布

<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被改变了?

+1

是没有问题的。 – Yorgo 2012-04-12 06:30:24

回答

0

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

+0

谢谢迈克。如果你让我知道我需要在IIS中进行反映网址的更改,我将不胜感激。 – Poobalan 2012-04-12 06:35:21

+0

您是否完全控制服务器?或者至少你确定没有其他应用程序设置为/?通常应用程序安装在虚拟目录中,因为它不能在根目录(“/”)中设置。 – MikeSW 2012-04-12 07:06:42

+0

我的所有jquery $ .ajax()调用都具有url:/ Controller/Action ..由于虚拟目录名称在发布后添加,现在ajax调用需要url:mvcapplication/Controller/Action ..如何解决这个问题? – Poobalan 2012-04-12 08:13:05

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,这respresents的虚拟目录。 当参数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 } 
); 
+0

我试过这个,它不工作 – Poobalan 2012-04-12 07:46:52

+0

我的所有jquery $ .ajax()调用都有url:/ Controller/Action ..由于发布后添加虚拟目录名,现在ajax调用需要url:mvcapplication/Controller/Action ..如何解决这个问题? – Poobalan 2012-04-12 08:13:16

+0

您可以尝试更改Global.asax中的默认路由,请参阅我的编辑 – 2012-04-12 08:42:17