2012-04-12 15 views
0

In My MVC3 Razor Anwendung veröffentlichen Ich beziehe mich Ajax in der Layout-Seite als@ Url.Content Änderungen nach

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 

Als ich das laufen in meinem lokalen Rechner, seine perfekt .. Aber nach der Verwendung von iis7 Arbeits Veröffentlichung Meine Ajax-Anrufe funktionieren nicht. Wenn ich die Quelle im Browser anzeigen ausgewählt habe, ist die Referenz wie <script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> vor der Veröffentlichung und <script src="mvcapplication/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> nach der Veröffentlichung. Ich bin verwirrt Warum URL geändert wird?

+1

gibt es kein Problem. – Yorgo

Antwort

0

Da die Anwendung auf dem Server den virtuellen Pfad "mvcapplication" hat, befindet sich die Anwendung in IIS im virtuellen Verzeichnis "mvcapplication". Es hat nichts mit asp.net mvc zu tun, es ist eine IIS-Einstellung.

+0

Danke Mike. Ich würde mich freuen, wenn Sie mir die Änderungen mitteilen, die ich in IIS vornehmen muss, um die URL widerzuspiegeln. – Poobalan

+0

Haben Sie die volle Kontrolle über den Server? Oder bist du sicher, dass es keine andere App-Einrichtung als/gibt? Normalerweise wird eine App in einem virtuellen Verzeichnis eingerichtet, da sie nicht im Stammverzeichnis ("/") eingerichtet werden kann. – MikeSW

+0

Meine alle jquery $ .ajax() Aufrufe hat die URL:/Controller/Aktion .. Da virtuellen Verzeichnisnamen nach der Veröffentlichung hinzugefügt, jetzt der Ajax-Aufruf benötigt URL: mvcapplication/Controller/Action .. Wie zu lösen? – Poobalan

1

Url.Content(string contentPaht) verwendet die VirtualPathUtility.ToAbsolute(string contentPath) Methode eine absolute URL zu erstellen:

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; 
} 

Wie Sie die Request.ApplicationPath sehen verwendet wird, die die das Virtual Directory respresents. Wenn das Argument contentPath nicht mit ~ beginnt, wird der contentPath zurückgegeben, ohne die Methode ToAbsolute(string contentPath) zu verwenden.

So können Sie versuchen, mit:

@Url.Content("/Scripts/jquery.unobtrusive-ajax.js") 

Edit: Sie können auch versuchen, die Standardroute zu ändern:

routes.MapRoute(
    "Default", 
    "NameVirtualDirectory/{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
+0

Ich versuchte dies und es funktioniert nicht – Poobalan

+0

Meine alle jquery $ .ajax() Anrufe hat die URL:/Controller/Aktion .. Da virtuellen Verzeichnisnamen nach der Veröffentlichung hinzugefügt, jetzt der Ajax-Aufruf benötigt URL: mvcapplication/Controller/Action .. Wie löst man das? – Poobalan

+0

Sie können versuchen, das Standard-Routing in der Global.asax ändern, siehe meine Bearbeitung –

Verwandte Themen