2012-04-12 52 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